скрипт оболочки для условного добавления репозитория apt

8

Я хочу написать сценарий оболочки, который добавит хранилище apt.
Я знаю, что я могу сделать это с помощью sudo add-apt-repository -y <repo>.

У меня вопрос, могу ли я сделать это, только если хранилище еще не было добавлено, что-то вроде:

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

Спасибо

Итай
источник
add-apt-repositoryдобавлю только один раз; интересная часть делает apt-get updateусловно.
Бени Чернявский-Паскин
Вы даже пытались добавить репозиторий дважды? То, что я только что сделал, было add-apt-repositoryдля темы дважды, но это привело только к одному файлу в. /etc/apt/sources/sources.list.dМожет быть, он уже проверяет?
Сергей Колодяжный
Прошло много времени с тех пор, как я попробовал, но IIRC дублирует строку в файле списка репозитория
Itay

Ответы:

5

Я изменил функцию Itay, чтобы он обрабатывал несколько параметров:

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
}

Чтобы называться так:

add_ppa webupd8team/atom xorg-edgers/ppa ubuntu-wine/ppa
Уго Хед
источник
4
Если вы хотите улучшить другой ответ, предложите изменить его и не создавайте новый ответ.
Дэвид Фёрстер
5

В итоге я написал функцию для работы с репозиториями 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
}

Интересно, есть ли более элегантный способ?

Итай
источник
1

Теперь можно удалить репозиторий до его добавления:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
Майк Шиян
источник