Bir paketin bir bash betiğine yum ile yüklenip yüklenmediğini nasıl anlarım?


75

Paketleri yükleyen bir komut dosyası yazmaya çalışıyorum, ancak komut dosyasında daha sonra herhangi bir noktada başarısız olursa, yüklediği şeyi geri alır. Tabii ki kullanıcı daha önce bir paket kurmuşsa, altlarından kaldırmak istemiyorum. Komut dosyası bir paketin daha önce yum aracılığıyla yüklenip yüklenmediğini nasıl anlayabilir?

Yanıtlar:


76

Yarı ile ilgili bir StackOverflow sorusunda aşağıdakileri buldum ; İhtiyacım olan cevap aslında oradaki soruyu tam olarak cevaplamadı (ve doğru cevap olarak seçilmedi), bu yüzden başkalarının daha kolay bulması için buraya göndereceğimi düşündüm.

yum list installed PACKAGE_NAME

Bu komut insan tarafından okunabilen bir çıktı verir, fakat daha da önemlisi bir çıkış durumu kodu döndürür; 0 paket gösterir edilir 1 paket gösterir, yüklü değil yüklü (paket geçerli olup olmadığını kontrol etmez, bu nedenle yum list installed herpderp-beepbopbooptıpkı bir "1" dönecektir yum list installed tracerouteEğer traceroute yüklü yoksa irade). Daha sonra "$?" İşaretini kullanabilirsiniz. bu çıkış kodu için.

Çıktı biraz karşı sezgisel olduğundan, çıktıyı daha "mantıklı" hale getirmek için aşağıdaki bir sarmalayıcı işlevinde @Chris Downs'ın "yoğunlaştırılmış" versiyonunu kullandım (yani 1 = yüklü 0 = kurulu değil):

function isinstalled {
  if yum list installed "$@" >/dev/null 2>&1; then
    true
  else
    false
  fi
}

kullanım olurdu

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

DÜZENLE:

Çağrılan değerleri döndürürken, işlevi daha okunaklı / sezgisel hale getiren returnçağrıları olan trueve falseyerine bash beklenen değerleri döndürür (örneğin doğru için 0, yanlış için 1).

Komut dosyanızda yalnızca bir paketi kontrol ediyorsanız, yum list installeddoğrudan test etmekten daha iyi olabilirsiniz , ancak (IMHO) işlev ne olup bittiğini anlamanızı kolaylaştırır ve sözdiziminin hatırlanması yumtüm yönlendirmelerden daha kolaydır çıktılarını bastırmak için.


2
Değerini manüel olarak kontrol etmenize gerek yok $?, sadece komutu koşullu bir şekilde if yum list installed "$package" >/dev/null 2>&1; then [...]
Chris Down

1
Bence yankı ifadelerin ters, hayır mı? isInstalledPaket kuruluysa 1 döndürür; ancak 1 bash olarak false olarak değerlendirilir, bu yüzden "kurulmamış" yankılanır.
FGreg

@FGreg good call ... returnİfadeleri çağrılarla değiştirdim trueve falsebu nedenle işlev kolayca okunabiliyor ancak çıktı bash beklentilerini döndürüyor.
Doktor J

5
OMG, 21. yüzyıl, bir paketin kurulup kurulmadığını anlamak için uygun bir seçeneğe sahip olamazlar, bu yüzden yazma işlevim ya da bir linerim yok !?
Sunil D.

21

Tam olarak "yum yoluyla" sorusunun ön koşulunu yerine getirmiyor, ancak "yum -q listesi" den daha hızlı:

rpm -q <package_name>

Olası yüklü sürümün tam adını ve eğer yüklüyse "0" ve değilse "1" hata kodunu döndürür.


+1 çünkü bu daha hızlı
Freddie Fabregas

Kesinlikle daha hızlı, çünkü rpmyerel paket yöneticisi. yumuzak depolardaki paketlerle ilgilenmek içindir
Sergiy Kolodyazhnyy

9

Basit oneliner:

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

0

Yum için kullanışlı bir script:

#!/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

Pckarr dizisinde, kurmak istediğiniz paketleri listeleyin veya kurulup kurulmadığını kontrol edin.


0

Ayrıca $?yum'dan dönüş değerini okuyabilirsiniz . Her şeyin işe yarayıp yaramadığına bağlı olarak 0 olması gerekir. Bir şey başarısız olursa farklı işlemler yapmak istiyorsanız bu iyi bir yöntemdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.