Znalazłem następujące na częściowo powiązane pytanie StackOverflow ; odpowiedź, której potrzebowałem, nie do końca odpowiedziała na pytanie (i nie została wybrana jako poprawna odpowiedź), więc pomyślałem, że opublikuję ją tutaj, aby inni mogli łatwiej znaleźć.
yum list installed PACKAGE_NAME
To polecenie zwraca dane wyjściowe czytelne dla człowieka, ale co ważniejsze zwraca kod statusu wyjścia; 0 oznacza, że pakiet jest zainstalowany, 1 oznacza, że pakiet nie został zainstalowany (nie sprawdza, czy pakiet jest prawidłowy, więc yum list installed herpderp-beepbopboop
zwróci „1” tak samo, jak w yum list installed traceroute
przypadku braku traceroute). Następnie możesz sprawdzić „$?” dla tego kodu wyjścia.
Ponieważ dane wyjściowe są nieco sprzeczne z intuicją, użyłem „skróconej” wersji @Chris Downs poniżej w funkcji otoki, aby uczynić wydruk bardziej „logicznym” (tj. 1 = zainstalowany 0 = niezainstalowany):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
użycie byłoby
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
EDYTOWAĆ:
Zamienione return
instrukcje z wywołaniami do true
i false
które pomagają uczynić funkcję bardziej czytelną / intuicyjną, zwracając wartości oczekiwane przez bash (tj. 0 dla wartości true, 1 dla wartości false).
Jeśli sprawdzasz tylko jeden pakiet w skrypcie, być może lepiej jest przetestować yum list installed
bezpośrednio, ale (IMHO) funkcja ułatwia zrozumienie, co się dzieje, a jej składnia jest znacznie łatwiejsza do zapamiętania niż yum
przy wszystkich przekierowaniach tłumić jego moc wyjściową.
$?
, po prostu zawiń polecenie warunkowo:if yum list installed "$package" >/dev/null 2>&1; then [...]