web-dev-qa-db-ja.com

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

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

私は何かができると思った

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

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

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

14
Lee Lowder

gem list <name> -iは、gemがインストールされている場合はtrue、それ以外の場合はfalseを返します。また、戻りコードは予想されるものです。

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


編集: @ Riateche 別の方法でインストールされたgemの部分文字列であるgem名を検索すると、これが誤検知になる可能性があることが正しく確認されました。これを回避するには、正規表現構文を使用します。

gem list '^<name>$' -i

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

26
Sven

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

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

これがこれを解決する正規の方法であるかどうかはわかりませんが、うまくいきます。

6
larsks