как проверить, что PPA уже добавлен в список источников apt в скрипте bash


11

Кто-нибудь знает, как проверить, что PPA уже добавлен в мою систему, прежде чем я добавлю его с помощью add-apt-repositoryкоманды в shell script.

Это было бы очень полезно.

Спасибо.

Ответы:


11

Вы можете сделать что-то вроде этого:

the_ppa=...  # e.g. the_ppa="ondrej/apache2"

if ! grep -q "^deb .*$the_ppa" /etc/apt/sources.list /etc/apt/sources.list.d/*; then
    # commands to add the ppa ...
fi

Ноты:

  • grep выходит с успехом, если находит совпадение
  • Это !отрицает, поэтому команды будут выполняться, если нет совпадений = ppa не добавлено
  • -qФлаг делает grep тихо , так что не печатает совпавшие строки. Это был бы просто шум, нам нужно только знать, есть ли совпадение или нет, для которого идеально подходит код выхода
  • ^deb .*Префикс , чтобы убедиться , что искомая строка начинается с того deb, чтобы исключить строки, которые закомментированные

Как выяснилось, это позволит найти ppas, которые были закомментированы, но я хочу найти PPA, которые не были закомментированы, и ответ @ Ten-Coins делает это.
Taytay

2

Откройте свой терминал и введите эту команду

grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep fogger

замените фоггер на имя PPA.

введите описание изображения здесь


1
приятно видеть, что frogger все еще жив, я думаю, что grep не является правильным решением для оператора if в сценарии оболочки
Josh

Вы также можете искать поле с помощью awk. довольно быстро
2013 года

Я не знаком с awk, но если у вас есть решение, не стесняйтесь опубликовать свой ответ и получить повторение. Ps. Мне очень нравится один лайнер
Джош

так как я нахожусь в отпуске, не могу опубликовать сейчас без тестирования должным образом. для чего это даунвот?
2013 года

Я проверю это с утверждением if позже в тот же день. Извините за понижение. Я не мог читать такие посты поздно вечером. Я предполагаю, что это должно работать и ответит позже, если я проверил команду.
Джош

0

Извлеките файлы list.save, исходники, убедитесь, что только строки deb, и посчитайте это для "fogger" ppa:

ppa_added=`grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep -v list.save | grep -v deb-src | grep deb | grep fogger | wc -l`

echo $ppa_added

Это также находит debстроки, которые закомментированы, начиная с # deb, и строки из файлов, как foo-ppa.list.distUpgrade- это предназначено?
Фолькер Сигел
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.