Ho trovato quanto segue su una domanda StackOverflow semi-correlata ; la risposta di cui avevo bisogno in realtà non rispondeva abbastanza alla domanda lì (e non era stata selezionata come risposta corretta), quindi ho pensato di pubblicarla qui perché altri lo trovassero più facile.
yum list installed PACKAGE_NAME
Questo comando restituisce un output leggibile dall'uomo, ma soprattutto restituisce un codice di stato di uscita; 0 indica che il pacchetto è installato, 1 indica che il pacchetto non è installato (non verifica se il pacchetto è valido, quindi yum list installed herpderp-beepbopboop
restituirà un "1" proprio come yum list installed traceroute
farebbe se non hai installato traceroute). Successivamente puoi controllare "$?" per questo codice di uscita.
Poiché l'output è in qualche modo contro-intuitivo, ho usato la versione "condensata" di @Chris Downs di seguito in una funzione wrapper per rendere l'output più "logico" (ovvero 1 = installato 0 = non installato):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
l'uso sarebbe
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
MODIFICARE:
Sostituite le return
istruzioni con le chiamate a true
e false
che aiutano a rendere la funzione più leggibile / intuitiva, mentre restituiscono i valori previsti da bash (ovvero 0 per vero, 1 per falso).
Se stai solo cercando un pacchetto nel tuo script, potresti semplicemente fare un test migliore yum list installed
direttamente, ma (IMHO) la funzione rende più facile capire cosa sta succedendo e la sua sintassi è molto più facile da ricordare rispetto yum
a tutti i reindirizzamenti per sopprimerne l'output.
$?
, basta avvolgere il comando in un condizionale:if yum list installed "$package" >/dev/null 2>&1; then [...]