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


14

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

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

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

但是在命令行上使用进行的测试echo $?表明,gem list <name>无论是否实际找到名称,它都会返回0。

这是否意味着我必须使用grep来过滤gem列表的输出,还是有更好的方法来检查是否已安装gem?

Answers:


26

gem list <name> -itrue如果安装了gem,则返回该字符串,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 2014年

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:“查询命令是list和search命令的基础。您应该真正使用list和search命令。此命令太难使用了。” ...不想在SO社区中养成不良习惯!:-)
pvandenberk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.