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 [...]
isInstalled
Gibt 1 zurück, wenn das Paket installiert ist. aber 1 wird in bash als falsch gewertet, sodass "nicht installiert" wiedergegeben wird.return
Anweisungen durch Aufrufe vontrue
und ersetztfalse
, sodass die Funktion leicht lesbar ist und dennoch die erwartete Ausgabe-Bash zurückgibt.Die Voraussetzung der Frage "via yum" nicht genau zu erfüllen, aber schneller als "yum -q list" ist:
Dies gibt den genauen Namen der möglicherweise installierten Version sowie den Fehlercode "0" (falls installiert) und "1" (falls nicht) zurück.
quelle
rpm
lokaler Paketmanager.yum
ist für den Umgang mit Paketen in Remote-RepositoriesEinfacherer Oneliner:
quelle
Ein praktisches Skript für yum:
#!/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
Listen Sie in pckarr array die Pakete auf, die Sie installieren möchten, oder überprüfen Sie, ob diese installiert sind.
quelle
Sie können auch den Rückgabewert
$?
von yum lesen . Sollte 0 sein, wenn alles geklappt hat oder positiv, je nachdem, auf welche Probleme Sie gestoßen sind. Dies ist eine gute Möglichkeit, wenn Sie bei einem Fehler verschiedene Aktionen ausführen möchten.quelle