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 [...]
isInstalled
zwraca 1, jeśli pakiet jest zainstalowany; ale 1 jest oceniane na false w bash, więc echo „niezainstalowany”.return
instrukcje wywołaniami dotrue
ifalse
, więc funkcja jest łatwa do odczytania, ale zwraca oczekiwane bash wyjściowy.Nie do końca spełnione jest pytanie „via yum”, ale szybsze niż „lista yum -q”:
która zwraca dokładną nazwę ewentualnie zainstalowanej wersji, a także kod błędu „0”, jeśli jest zainstalowany, i „1”, jeśli nie.
źródło
rpm
jest lokalnym menedżerem pakietów.yum
jest do obsługi paczek w zdalnych repozytoriachProstszy oneliner:
źródło
Przydatny skrypt dla mniam:
#!/bin/sh pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME) yum update -y for i in ${pckarr[*]} do isinstalled=$(rpm -q $i) if [ ! "$isinstalled" == "package $i is not installed" ]; then echo Package $i already installed else echo $i is not INSTALLED!!!! yum install $i -y fi done updatedb
W tablicy pckarr wypisz te pakiety, które chcesz zainstalować lub sprawdź, czy są zainstalowane.
źródło
Możesz także odczytać wartość zwracaną
$?
z yum. Powinno wynosić 0, jeśli wszystko działało lub było pozytywne, w zależności od tego, jakie problemy napotkałeś. To dobry sposób, jeśli chcesz podjąć inne działania, jeśli coś zawiedzie.źródło