Я нашел следующее в полу-связанном вопросе 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 [...]