从 Bash 脚本检查 Ruby 是否已安装

从 Bash 脚本检查 Ruby 是否已安装

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

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

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

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

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

答案1

gem list <name> -itrue如果 gem 已安装,则返回字符串,false否则返回字符串。此外,返回代码也是您所期望的。

欲了解更多信息,请参阅gem help list


编辑:@Riateche正确观察到,如果您搜索的 gem 名称是已安装 gem 的子字符串,则可能会产生误报。为了避免这种情况,请使用正则表达式语法:

gem list '^<name>$' -i

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

答案2

如果未安装指定的 gem,则命令似乎gem spec会失败并出现错误。因此:

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

相关内容