skrypt powłoki, aby warunkowo dodać apt repository

8

Chcę napisać skrypt powłoki, który doda repozytorium apt.
Wiem, że mogę to zrobić za pomocą sudo add-apt-repository -y <repo>.

Moje pytanie brzmi: czy mogę to zrobić tylko wtedy, gdy repozytorium nie zostało już dodane, coś w stylu:

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

Dzięki

Itay
źródło
add-apt-repositorydoda to tylko raz; interesująca część to apt-get updatewarunkowo.
Beni Cherniavsky-Paskin
Czy próbowałeś nawet dwukrotnie dodać repozytorium? To, co zrobiłem teraz, dotyczy add-apt-repositorydwukrotnie motywu, ale to spowodowało tylko jeden plik w. /etc/apt/sources/sources.list.dMoże to już robi kontrole?
Sergiy Kolodyazhnyy
Minęło trochę czasu, odkąd go wypróbowałem, ale IIRC powiela wiersz w pliku listy repozytorium
Itay

Odpowiedzi:

5

Zmieniłem funkcję Itay, aby obsługiwała wiele parametrów:

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
}

Można nazwać tak:

add_ppa webupd8team/atom xorg-edgers/ppa ubuntu-wine/ppa
Ugo Hed
źródło
4
Jeśli chcesz poprawić inną odpowiedź, zasugeruj jej zmianę i nie twórz nowej odpowiedzi.
David Foerster,
5

Skończyło się na napisaniu funkcji do obsługi repozytoriów 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
}

Zastanawiam się, czy jest jakiś bardziej elegancki sposób.

Itay
źródło
1

Teraz możliwe jest usunięcie repozytorium przed jego dodaniem:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Mike Shiyan
źródło