Bas komut dosyasından bir yakut taşının yüklü olup olmadığını kontrol etme


14

Bir bash betiğinden, bazı Ruby taşlarının yüklü olup olmadığını kontrol etmem gerekiyor.

Böyle bir şey yapabileceğimi düşündüm

if ! gem list <name>; then do_stuff; fi

ancak komut satırını kullanarak yapılan test, adın bulunup bulunmadığına bakılmaksızın 0 döndürdüğünü echo $?gösterir gem list <name>.

Bu, mücevher listesinin çıktısını filtrelemek için grep kullanmam gerektiği anlamına mı geliyor, yoksa bir gemin yüklü olup olmadığını kontrol etmek için daha iyi bir yol var mı?

Yanıtlar:


26

gem list <name> -itruemücevher yüklü ise dize döndürür ve falseaksi takdirde. Ayrıca, dönüş kodları beklediğiniz şeydir.

Daha fazla bilgi için, bkz gem help list.


Düzenleme: @Riateche , aksi takdirde yüklü bir mücevher alt dizesi olan bir mücevher adı için arama yaparsanız, bu yanlış pozitif verebilir gözlemledi. Bundan kaçınmak için bir normal ifade sözdizimi kullanın:

gem list '^<name>$' -i

(Örnek:) gem list '^mini$' -i.


1
Belirli bir sürümü yüklüyse, sadece eklemek, kontrol etmek --versionör: gem list -i compass --version 0.12.4.
moeffju

6

gem specAdlandırılmış gem yüklü değilse komut bir hatayla başarısız olur gibi görünüyor . Yani:

if ! gem spec <name> > /dev/null 2>&1; then
  echo "Gem <name> is not installed!"
fi

Bunu çözmenin kanonik yolu olup olmadığını bilmiyorum, ama işe yarıyor.


3

queryKomutun alt komutunu da kullanabilirsiniz gem.

$ gem query -i -n bundler 
true
kullanım alıntısı
$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -I                               Equivalent to --no-installed
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP

-vAnahtarı kullanarak belirli sürümleri de arayacaktır .

$ gem query -i -n bundler -v 1.6.2.1
false

1
Downvote için özür dileriz, ancak man sayfasında belirtildiği gibi gem query: "Sorgu komutu, liste ve arama komutlarının temelidir. Bunun yerine liste ve arama komutlarını gerçekten kullanmalısınız. Bu komutun kullanımı çok zor." ... SO topluluğunda kötü alışkanlıklar yaratmak istemiyorum! :-)
pvandenberk
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.