script shell pour ajouter conditionnellement un référentiel apt

8

Je veux écrire un script shell qui ajoutera un référentiel apt.
Je sais que je peux le faire en utilisant sudo add-apt-repository -y <repo>.

Ma question est de savoir si je ne peux le faire que si le référentiel n'a pas déjà été ajouté, quelque chose comme:

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

Merci

Itay
la source
add-apt-repositoryne l'ajoutera qu'une seule fois; la partie intéressante fait le apt-get updateconditionnellement.
Beni Cherniavsky-Paskin
Avez-vous même essayé d'ajouter un référentiel deux fois? Ce que j'ai fait tout à l'heure est add-apt-repositorypour un thème deux fois, mais cela n'a abouti qu'à un seul fichier en. /etc/apt/sources/sources.list.dPeut-être qu'il fait déjà les vérifications?
Sergiy Kolodyazhnyy
Cela fait un moment que je ne l'ai pas essayé, mais IIRC il duplique la ligne dans le fichier de liste du référentiel
Itay

Réponses:

5

J'ai changé la fonction d'Itay pour qu'il gère plusieurs paramètres:

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
}

Pour être appelé comme ceci:

add_ppa webupd8team/atom xorg-edgers/ppa ubuntu-wine/ppa
Ugo Hed
la source
4
Si vous souhaitez améliorer une autre réponse, veuillez suggérer une modification et ne pas créer de nouvelle réponse.
David Foerster
5

J'ai fini par écrire une fonction pour gérer les référentiels 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
}

Je me demande s'il y a une manière plus élégante.

Itay
la source
1

Il est maintenant possible de supprimer le référentiel avant de l'ajouter:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Mike Shiyan
la source