Memeriksa apakah permata ruby ​​diinstal dari skrip bash


14

Saya perlu, dari skrip bash, memeriksa untuk melihat apakah permata Ruby tertentu diinstal.

Saya pikir saya bisa melakukan sesuatu seperti

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

tetapi pengujian pada baris perintah menggunakan echo $?menunjukkan yang gem list <name>mengembalikan 0 terlepas dari apakah nama sebenarnya ditemukan.

Apakah ini berarti saya harus menggunakan grep untuk memfilter keluaran daftar permata, atau adakah cara yang lebih baik untuk memeriksa apakah permata diinstal?

Jawaban:


26

gem list <name> -iakan mengembalikan string truejika permata diinstal dan falsesebaliknya. Juga, kode kembali adalah apa yang Anda harapkan.

Untuk informasi lebih lanjut, lihat gem help list.


Sunting: @Riateche mengamati dengan benar bahwa ini mungkin memberikan positif palsu jika Anda mencari nama permata yang merupakan substring dari permata yang dipasang lain. Untuk menghindari ini, gunakan sintaks regex:

gem list '^<name>$' -i

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


1
Untuk memeriksa apakah versi tertentu terinstal, tambahkan saja --version, misalnya: gem list -i compass --version 0.12.4.
moeffju

6

Tampaknya seolah-olah gem specperintah akan gagal dengan kesalahan jika permata bernama tidak diinstal. Begitu:

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

Saya tidak tahu apakah ini cara kanonik untuk menyelesaikan ini, tetapi ini berhasil.


3

Anda juga dapat menggunakan querysub-perintah untuk gemperintah.

$ gem query -i -n bundler 
true
kutipan penggunaan
$ 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

Juga akan mencari versi tertentu, menggunakan -vsakelar.

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

1
Permintaan maaf untuk downvote, tetapi sebagaimana dinyatakan dalam halaman manual untuk gem query: "Perintah permintaan adalah dasar untuk daftar dan perintah pencarian. Anda harus benar-benar menggunakan daftar dan mencari perintah saja. Perintah ini terlalu sulit untuk digunakan." ... tidak ingin membuat kebiasaan buruk di komunitas SO! :-)
pvandenberk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.