ruby gemがbashスクリプトからインストールされているかどうかを確認する


14

bashスクリプトから、特定のRuby gemがインストールされているかどうかを確認する必要があります。

私は次のようなことができると思った

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

ただし、名前が実際に見つかったかどうかに関係なく、0 echo $?gem list <name>返すショーを使用してコマンドラインでテストします。

これは、grepを使用してgemリストの出力をフィルタリングする必要があるということですか、それともgemがインストールされているかどうかを確認するより良い方法がありますか?

回答:


26

gem list <name> -itruegemがインストールされているfalse場合とそうでない場合は、文字列を返します。また、戻りコードは予想どおりのものです。

詳細については、を参照してくださいgem help list


編集:@Riatecheは、インストールされていないgemのサブストリングであるgem名を検索すると、これが誤検出をもたらす可能性があることを正しく観察しました。これを回避するには、正規表現構文を使用します。

gem list '^<name>$' -i

(例:)gem list '^mini$' -i


1
特定のバージョンがインストールされているかどうかを確認するには--version、たとえばを追加しますgem list -i compass --version 0.12.4
moeffju

6

指定さgem specれたgemがインストールされていない場合、コマンドはエラーで失敗するように見えます。そう:

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

これがこれを解決する標準的な方法であるかどうかはわかりませんが、うまくいきます。


3

queryサブコマンドをコマンドに使用することもできgemます。

$ gem query -i -n bundler 
true
使用の抜粋
$ 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

-vスイッチを使用して、特定のバージョンも検索します。

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

1
ダウン票については謝罪しgem queryますが、「クエリコマンドはリストおよび検索コマンドの基礎です。代わりにリストおよび検索コマンドを実際に使用する必要があります。このコマンドは使いにくいです。」... SOコミュニティに悪い習慣を作りたくない!:-)
pvandenberk 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.