shell script para adicionar condicionalmente repositório apt


8

Eu quero escrever um script de shell que irá adicionar um repositório apt.
Eu sei que posso fazer isso usando sudo add-apt-repository -y <repo>.

Minha pergunta é: posso fazer isso apenas se o repositório já não tiver sido adicionado, algo como:

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

obrigado


add-apt-repositoryo adicionará apenas uma vez; a parte interessante é fazer apt-get updatecondicionalmente.
Beni Cherniavsky-Paskin

Você já tentou adicionar um repositório duas vezes? O que eu fiz agora é add-apt-repositoryum tema duas vezes, mas que resultou em apenas um arquivo. /etc/apt/sources/sources.list.dTalvez ele já faça as verificações?
Sergiy Kolodyazhnyy 23/03

Tem sido um tempo desde que eu tentei, mas IIRC ele duplica a linha no arquivo de lista do repositório
Itay

Respostas:


5

Alterei a função de Itay para que ele lide com vários parâmetros:

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
}

Para ser chamado assim:

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

4
Se você deseja melhorar outra resposta, sugira uma edição e não crie uma nova resposta.
David Foerster

5

Acabei escrevendo uma função para lidar com repositórios 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
}

Gostaria de saber se existe alguma maneira mais elegante.


1

Agora é possível remover o repositório antes de adicioná-lo:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.