shell script để thêm điều kiện kho apt


8

Tôi muốn viết một kịch bản shell sẽ thêm một kho chứa apt.
Tôi biết rằng tôi có thể làm điều đó bằng cách sử dụng sudo add-apt-repository -y <repo>.

Câu hỏi của tôi là tôi chỉ có thể làm điều đó nếu kho lưu trữ chưa được thêm vào, đại loại như:

if repo was not added yet:
  sudo add-apt-repository -y <repo>
  sudo apt-get update

Cảm ơn


add-apt-repositorysẽ chỉ thêm nó một lần; phần thú vị là làm apt-get updateđiều kiện.
Beni Cherniavsky-Paskin

Bạn thậm chí đã thực sự thử thêm một kho lưu trữ hai lần? Những gì tôi đã làm bây giờ là add-apt-repositorycho một chủ đề hai lần, nhưng điều đó chỉ dẫn đến một tệp trong. /etc/apt/sources/sources.list.dCó phải nó đã kiểm tra chưa?
Sergiy Kolodyazhnyy

Đã được một thời gian kể từ khi tôi dùng thử nhưng IIRC nó sao chép dòng trong tệp danh sách của kho lưu trữ
Itay

Câu trả lời:


5

Tôi đã thay đổi chức năng của Itay để nó xử lý nhiều tham số:

add_ppa() {
  for i in "$@"; do
    grep -h "^deb.*$i" /etc/apt/sources.list.d/* > /dev/null 2>&1
    if [ $? -ne 0 ]
    then
      echo "Adding ppa:$i"
      sudo add-apt-repository -y ppa:$i
    else
      echo "ppa:$i already exists"
    fi
  done
}

Được gọi như thế này:

add_ppa webupd8team/atom xorg-edgers/ppa ubuntu-wine/ppa

4
Nếu bạn muốn cải thiện câu trả lời khác, vui lòng đề xuất chỉnh sửa cho nó và không tạo câu trả lời mới.
David Foerster

5

Tôi đã kết thúc việc viết một chức năng để đối phó với các kho lưu trữ ppa.

add_ppa() {
  grep -h "^deb.*$1" /etc/apt/sources.list.d/* > /dev/null 2>&1
  if [ $? -ne 0 ]
  then
    echo "Adding ppa:$1"
    sudo add-apt-repository -y ppa:$1
    return 0
  fi

  echo "ppa:$1 already exists"
  return 1
}

Tôi tự hỏi nếu có một số cách thanh lịch hơn.


1

Bây giờ có thể xóa kho lưu trữ trước khi thêm nó:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.