Bashスクリプトから、特定のRuby gemsがインストールされているかどうかを確認する必要があります。
私は何かができると思った
if ! gem list <name>; then do_stuff; fi
ただし、echo $?
を使用してコマンドラインでテストすると、名前が実際に見つかったかどうかに関係なく、gem list <name>
が0を返すことがわかります。
これは、gemリストの出力をフィルタリングするためにgrepを使用する必要があることを意味しますか、それとも、gemがインストールされているかどうかを確認するより良い方法がありますか?
gem list <name> -i
は、gemがインストールされている場合はtrue
、それ以外の場合はfalse
を返します。また、戻りコードは予想されるものです。
詳細については、gem help list
を参照してください。
編集: @ Riateche 別の方法でインストールされたgemの部分文字列であるgem名を検索すると、これが誤検知になる可能性があることが正しく確認されました。これを回避するには、正規表現構文を使用します。
gem list '^<name>$' -i
(例:gem list '^mini$' -i
)。
指定されたgemがインストールされていない場合、gem spec
コマンドはエラーで失敗するように見えます。そう:
if ! gem spec <name> > /dev/null 2>&1; then
echo "Gem <name> is not installed!"
fi
これがこれを解決する正規の方法であるかどうかはわかりませんが、うまくいきます。