script de shell para agregar condicionalmente el repositorio apt


8

Quiero escribir un script de shell que agregará un repositorio apto.
Sé que puedo hacerlo usando sudo add-apt-repository -y <repo>.

Mi pregunta es si puedo hacerlo solo si el repositorio no se ha agregado ya, algo como:

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

Gracias


add-apt-repositorysolo lo agregará una vez; Lo interesante es hacer apt-get updatecondicionalmente.
— Beni Cherniavsky-Paskin

¿Incluso has intentado agregar un repositorio dos veces? Lo que he hecho ahora es add-apt-repositorypara un tema dos veces, pero eso resultó en un solo archivo en. ¿ /etc/apt/sources/sources.list.dTal vez ya hace las comprobaciones?
— Sergiy Kolodyazhnyy

Ha pasado un tiempo desde que lo probé, pero IIRC duplica la línea en el archivo de la lista del repositorio
— Itay

Respuestas:


5

Cambié la función de Itay para que maneje múltiples 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
}

Ser llamado así:

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

44
Si desea mejorar otra respuesta, sugiérale que la edite y no cree una nueva respuesta.
— David Foerster

5

Terminé escribiendo una función para tratar con repositorios de 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
}

Me pregunto si hay alguna forma más elegante.


1

Ahora es posible eliminar el repositorio antes de agregarlo:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.