检查是否从bash脚本安装了ruby gem

我需要从bash脚本中检查是否安装了某些Ruby gems。

我以为我可以做类似的事情

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

但在命令行上使用echo $? 显示gem list <name>返回0,不pipe名字是否被find。

这是否意味着我必须使用grep来过滤gem list的输出,或者有更好的方法来检查是否安装了gem。

gem list <name> -i将返回stringtrue如果安装了gem,否则返回false 。 此外,返回代码是你所期望的。

有关更多信息,请参阅gem help list

它看起来好像如果没有安装命名的gem, gem spec命令将会失败并出现错误。 所以:

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

我不知道这是否是解决这个问题的标准方法,但它是有效的。

您也可以使用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