Encontrei o seguinte em uma pergunta semi-relacionada ao StackOverflow ; a resposta de que eu precisava não respondeu muito bem à pergunta lá (e não foi selecionada como a resposta correta), então achei que a publicaria aqui para que outras pessoas encontrassem mais fácil.
yum list installed PACKAGE_NAME
Este comando retorna uma saída legível por humanos, mas, mais importante, retorna um código de status de saída; 0 indica que o pacote está instalado, 1 indica que o pacote não está instalado (não verifica se o pacote é válido, yum list installed herpderp-beepbopboop
retornará um "1" da mesma forma que yum list installed traceroute
fará se você não tiver o traceroute instalado). Você pode verificar posteriormente "$?" para este código de saída.
Como a saída é um pouco contra-intuitiva, usei a versão "condensada" do @Chris Downs abaixo em uma função de wrapper para tornar a saída mais "lógica" (ou seja, 1 = instalado 0 = não instalado):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
uso seria
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
EDITAR:
Instruções substituídas return
por chamadas para true
e false
que ajudam a tornar a função mais legível / intuitiva, retornando os valores esperados pelo bash (ou seja, 0 para verdadeiro, 1 para falso).
Se você está apenas procurando um pacote em seu script, pode ser melhor testar yum list installed
diretamente, mas (IMHO) a função facilita a compreensão do que está acontecendo, e sua sintaxe é muito mais fácil de lembrar do que yum
com todos os redirecionamentos para suprimir sua saída.
$?
, só embrulhar o comando em uma condicional:if yum list installed "$package" >/dev/null 2>&1; then [...]