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

Itay
fonte
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
Ugo Hed
fonte
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.

Itay
fonte
1

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

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Mike Shiyan
fonte