Я нашел следующее в полу-связанном вопросе StackOverflow ; ответ, который мне был нужен, на самом деле не совсем отвечал на вопрос (и не был выбран в качестве правильного ответа), поэтому я решил опубликовать его здесь, чтобы другим было проще.
yum list installed PACKAGE_NAME
Эта команда возвращает некоторый читабельный вывод, но, что более важно, возвращает код состояния выхода; 0 указывает , что пакет будет установлен, 1 указывает , что пакет не установлен (не проверяет , является ли пакет, так yum list installed herpderp-beepbopboop
будет возвращать «1» так же , как yum list installed traceroute
воля , если не установлен трассировку). Вы можете впоследствии проверить "$?" для этого кода выхода.
Поскольку вывод является несколько нелогичным, я использовал «сжатую» версию @Chris Downs ниже в функции-обертке, чтобы сделать вывод более «логичным» (т. Е. 1 = установлено 0 = не установлено):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
использование будет
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
РЕДАКТИРОВАТЬ:
Заменяет return
операторы вызовами true
и false
которые помогают сделать функцию более читабельной / интуитивно понятной, возвращая значения, которые ожидает bash (т. Е. 0 для true, 1 для false).
Если вы просто проверяете наличие одного пакета в своем скрипте, возможно, вам лучше просто тестировать yum list installed
напрямую, но (ИМХО) функция облегчает понимание происходящего, а ее синтаксис гораздо легче запомнить, чем yum
со всеми перенаправлениями. подавить его выход.
$?
, просто оберните команду в условное выражение:if yum list installed "$package" >/dev/null 2>&1; then [...]
isInstalled
возвращает 1, если пакет установлен; но 1 оценивается как ложное в bash, поэтому выводится сообщение «не установлено».return
операторы на вызовыtrue
иfalse
, так что функция легко читаема, но возвращает ожидаемый выходной bash.Не совсем соответствует предварительному условию вопроса "via yum", но быстрее, чем "yum -q list":
который возвращает точное имя возможно установленной версии, а также код ошибки «0», если установлен, и «1», если нет.
источник
rpm
это локальный менеджер пакетов.yum
для работы с пакетами в удаленных репозиторияхПроще говоря:
источник
Удобный скрипт для yum:
#!/bin/sh pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME) yum update -y for i in ${pckarr[*]} do isinstalled=$(rpm -q $i) if [ ! "$isinstalled" == "package $i is not installed" ]; then echo Package $i already installed else echo $i is not INSTALLED!!!! yum install $i -y fi done updatedb
В массиве pckarr перечислите те пакеты, которые вы хотите установить, или проверьте, установлены ли они.
источник
Вы также можете прочитать возвращаемое значение
$?
из Yum. Должно быть 0, если все работает или положительно, в зависимости от того, с какими проблемами столкнулся yum. Это хороший способ, если вы хотите предпринять другие действия, если что-то не получается.источник