我需要从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