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.