it-swarm.com.de

Nach installierten Paketen suchen und wenn sie nicht gefunden werden

Ich muss nach installierten Paketen suchen und diese nicht installieren. 

Beispiel für RHEL, CentOS, Fedora:

rpm -qa | grep glibc-static
glibc-static-2.12-1.80.el6_3.5.i686

Wie überprüfe ich BASH?

Mache ich so etwas?

if [ "$(rpm -qa | grep glibc-static)" != "" ] ; then

Und was muss ich für andere Distributionen verwenden? apt-get?

15

Versuchen Sie den folgenden Code:

if ! rpm -qa | grep -qw glibc-static; then
    yum install glibc-static
fi

oder kürzer:

rpm -qa | grep -qw glibc-static || yum install glibc-static

Für Debian-Likes: 

dpkg -l | grep -qw package || apt-get install package

Für archlinux:

pacman -Qq | grep -qw package || pacman -S package
42
Gilles Quenot

Basierend auf den Antworten von @GillesQuenot und @Kidbulra wird hier ein Beispiel gezeigt, wie über mehrere Pakete gelooptet wird -/und falls fehlend installiert wird:

packageList="git gcc python-devel"

for packageName in $packageList; do
  rpm --quiet --query $packageName || Sudo yum install -y $packageName
done
1
Noam Manos
if [ $(yum list installed | cut -f1 -d" " | grep --extended '^full name of package being checked$' | wc -l) -eq 1 ]; then
  echo "installed";
else
  echo "missing"
fi

Ich verwende dies, weil es installiert/vermisst zurückgegeben wird, ohne auf einen Fehlerstatus angewiesen zu sein (was zu Problemen in Skripts führen kann, die einen "No Tolerance" -Ansatz für Fehler über verwenden 

set -o errexit

zum Beispiel)

0
Pancho

Wenn Sie dies gegen heruntergeladene RPMs tun. du kannst es durch.

rpm -Uvh package-name-version-tag.rpm
0
diyoda_