Ich fand das folgende auf einer semi-verwandten StackOverflow-Frage ; Die Antwort, die ich brauchte, beantwortete die Frage dort nicht ganz (und wurde nicht als die richtige Antwort ausgewählt), also dachte ich, ich würde sie hier posten, damit andere sie leichter finden.
yum list installed PACKAGE_NAME
Dieser Befehl gibt einige für den Menschen lesbare Ausgaben zurück, gibt jedoch vor allem einen Beendigungsstatuscode zurück. 0 zeigt das Paket wird installiert, 1 zeigt das Paket nicht installiert ist (nicht überprüft , ob das Paket gültig ist, so yum list installed herpderp-beepbopboop
wird wieder ein „1“ wie yum list installed traceroute
, wenn Sie nicht trace installiert haben). Sie können anschließend "$?" für diesen Exit-Code.
Da die Ausgabe etwas kontraintuitiv ist, habe ich die "komprimierte" Version von @Chris Downs in einer Wrapper-Funktion verwendet, um die Ausgabe "logischer" zu gestalten (dh 1 = installiert 0 = nicht installiert):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
Nutzung wäre
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
BEARBEITEN:
Ersetzte return
Anweisungen durch Aufrufe von true
und, false
die die Funktion lesbarer / intuitiver machen, während die von bash erwarteten Werte zurückgegeben werden (dh 0 für wahr, 1 für falsch).
Wenn Sie nur nach einem Paket in Ihrem Skript suchen, ist es vielleicht besser, es direkt zu testen yum list installed
, aber (IMHO) die Funktion macht es einfacher zu verstehen, was los ist, und die Syntax ist viel einfacher zu merken als yum
bei allen Weiterleitungen seine Ausgabe zu unterdrücken.
$?
wickeln den Befehl in eine Bedingung:if yum list installed "$package" >/dev/null 2>&1; then [...]