script di shell per aggiungere condizionalmente repository apt


8

Voglio scrivere uno script di shell che aggiungerà un repository apt.
So che posso farlo usando sudo add-apt-repository -y <repo>.

La mia domanda è: posso farlo solo se il repository non è stato già aggiunto, qualcosa del tipo:

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

Grazie


add-apt-repositorylo aggiungerà solo una volta; la parte interessante sta facendo il apt-get updatecondizionale.
Beni Cherniavsky-Paskin,

Hai mai provato ad aggiungere un repository due volte? Quello che ho fatto in questo momento è add-apt-repositoryper un tema due volte, ma ciò ha comportato solo un file in. /etc/apt/sources/sources.list.dForse fa già i controlli?
Sergiy Kolodyazhnyy,

È passato un po 'di tempo da quando l'ho provato ma IIRC duplica la riga nel file di elenco del repository
Itay

Risposte:


5

Ho cambiato la funzione di Itay in modo che gestisca più parametri:

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
}

Per essere chiamato così:

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

4
Se vuoi migliorare un'altra risposta, ti preghiamo di suggerire una modifica e non creare una nuova risposta.
David Foerster,

5

Ho finito per scrivere una funzione per gestire i repository 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
}

Mi chiedo se esiste un modo più elegante.


1

Ora è possibile rimuovere il repository prima di aggiungerlo:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.