强制完全匹配`gem list`

时间:2014-01-06 18:22:29

标签: rubygems

gem list rails用于匹配开始与“rails”(和the documentation still claims it works that way)的所有内容,但在某些时候它开始匹配包含的所有内容在名称的任何地方使用rails。这可能会变得荒谬,因为有(现在我写这个,但我确信它实际上按小时计算)2,764项与“rails”相匹配的项目:

gem list rails --remote | wc -l
2764

Rubygems可以默认只返回完全匹配吗?我没有看到任何commandline switches that force an exact match。可能是~/.gemrc中的设置?

显然我可以通过将输出连接到其他实用程序来实现这一点,但每次你想要(例如)检查宝石的最新版本时都会感到很痛苦,而且速度要慢得多,并迫使你停下来思考一个细节(IMO)会分散您正在处理的任何问题。

gem list rails --remote | grep '^rails '

有没有一种方法可以将其设为默认值?

3 个答案:

答案 0 :(得分:8)

您基本上是在命令行上输入正则表达式,所以

gem list -r ^rails$

无需管道即可进行精确搜索。我使用的是rubygems 2.0.6和2.4.5,它适用于两个版本。

但是,我无法找到任何可以放入.gemrc的内容。您可以轻松地为最常见的情况设置包装器shell脚本。

答案 1 :(得分:2)

如果您想搜索以“rails”开头的宝石,可以使用以“^”开头的搜索字符串:

gem list ^rails+ --remote

我已尝试使用版本1.8.24的rubygems list,其行为如文档中所述,但对于rubygems 2.2.1,您将不得不使用此版本。

答案 2 :(得分:0)

似乎他们在版本2.7.3或其附近添加了一个选项。我在2.5.1中没有。

http://guides.rubygems.org/command-reference/#gem-list

-e, -​-exact - Name of gem(s) to query on matches the provided STRING

如果您使用的是Windows,则必须使用REGEX的引号,否则它将无法正常工作。

gem list "^pg$" --remote --all