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


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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.