Encontré lo siguiente en una pregunta de StackOverflow semi-relacionada ; la respuesta que necesitaba no respondía realmente la pregunta allí (y no fue seleccionada como la respuesta correcta), así que pensé que la publicaría aquí para que otros la encuentren más fácilmente.
yum list installed PACKAGE_NAME
Este comando devuelve algunos resultados legibles por humanos, pero lo más importante es que devuelve un código de estado de salida; 0 indica que el paquete está instalado, 1 indica que el paquete no está instalado (no comprueba si el paquete es válido, por yum list installed herpderp-beepbopboop
lo que devolverá un "1" igual yum list installed traceroute
que si no tiene instalado traceroute). Posteriormente puede marcar "$?" para este código de salida
Como la salida es algo contraria a la intuición, utilicé la versión "condensada" de @Chris Downs a continuación en una función de envoltura para hacer que la salida sea más "lógica" (es decir, 1 = instalada 0 = no instalada):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
el uso sería
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
EDITAR:
Se reemplazaron las return
declaraciones con llamadas a true
y false
que ayudan a que la función sea más legible / intuitiva, al tiempo que devuelve los valores que bash espera (es decir, 0 para verdadero, 1 para falso).
Si solo está buscando un paquete en su script, es mejor que pruebe yum list installed
directamente, pero (en mi humilde opinión) la función hace que sea más fácil de entender lo que está sucediendo, y su sintaxis es mucho más fácil de recordar que yum
con todos los redireccionamientos para suprimir su salida.
$?
, simplemente ajuste el comando en un condicional:if yum list installed "$package" >/dev/null 2>&1; then [...]