it-swarm.com.de

Wie kann ich feststellen, ob ein Paket über yum in einem Bash-Skript installiert ist?

Ich versuche, ein Skript zu schreiben, das Pakete installiert, aber wenn es später im Skript fehlschlägt, wird das installierte Skript zurückgesetzt. Wenn der Benutzer bereits ein Paket installiert hat, möchte ich es natürlich nicht unter ihnen deinstallieren. Wie kann mein Skript feststellen, ob ein Paket zuvor über yum installiert wurde?

80
Doktor J

Ich fand folgendes auf einem halb verwandten StackOverflow-Frage ; Die Antwort, die ich brauchte, beantwortete die Frage dort nicht wirklich (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 eine für Menschen lesbare Ausgabe zurück, vor allem aber einen Exit-Statuscode. 0 zeigt an, dass das Paket installiert ist, 1 zeigt an, dass das Paket nicht installiert ist (prüft nicht, ob das Paket gültig ist, daher gibt yum list installed herpderp-beepbopboop eine "1" zurück, genau wie yum list installed traceroute, wenn Sie keine Traceroute installiert haben). Sie können anschließend "$?" für diesen Exit-Code.

Da die Ausgabe etwas kontraintuitiv ist, habe ich die unten stehende "komprimierte" Version von @Chris Downs in einer Wrapper-Funktion verwendet, um die Ausgabe "logischer" zu gestalten (d. H. 1 = installiert 0 = nicht installiert):

function isinstalled {
  if yum list installed "[email protected]" >/dev/null 2>&1; then
    true
  else
    false
  fi
}

nutzung wäre

if isinstalled $package; then echo "installed"; else echo "not installed"; fi

BEARBEITEN:

return -Anweisungen wurden durch Aufrufe von true und false ersetzt, die dazu beitragen, die Funktion lesbarer/intuitiver zu 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 möglicherweise besser, yum list installed Direkt zu testen, aber (IMHO) die Funktion erleichtert das Verständnis der Vorgänge und die Syntax ist viel einfacher Denken Sie daran, als yum mit allen Weiterleitungen, um seine Ausgabe zu unterdrücken.

80
Doktor J

Die Voraussetzung der Frage "via yum" nicht genau zu erfüllen, aber schneller als "yum -q list" ist:

rpm -q <package_name>

hier wird der genaue Name der möglicherweise installierten Version sowie der Fehlercode "0" (falls installiert) und "1" (falls nicht) zurückgegeben.

23
Gerald Schade

Einfacherer Oneliner:

yum -q list installed packageX &>/dev/null && echo "Installed" || echo "Not installed"
10
Zlemini

Ein handliches 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 im pckarr-Array die Pakete auf, die Sie installieren möchten, oder überprüfen Sie, ob diese installiert sind.

0

Sie können auch den Rückgabewert $? Von yum lesen. Sollte 0 sein, wenn alles funktioniert hat oder positiv, je nachdem, auf welche Probleme Sie gestoßen sind. Dies ist ein guter Weg, wenn Sie verschiedene Aktionen ausführen möchten, wenn etwas fehlschlägt.

0
Fever