如何列出远程站点上可用的 gem 的所有版本?

我试图找出所有远程可用的版本的指定宝石。

我试着用:

gem list rhc --remote

但它表明:

*** REMOTE GEMS ***
rhc (0.84.15)
rhcp (0.2.18)
rhcp_shell (0.2.12)

有什么想法吗?

85221 次浏览

试试:

gem list [STRING] [options]

例如:

gem list rhc -r

或者试试:

gem list -r rhc

(文档和提供的示例似乎相互矛盾-两者都试试)


请参阅文档:

Http://docs.rubygems.org/read/chapter/10#page34

嗯,这比我想象的要容易(嗯,不是真的,让我们说它应该是容易的) :

gem list rhc --remote --all

结果是:

*** REMOTE GEMS ***
rhc (0.84.15, 0.84.13, 0.83.9, 0.82.18, 0.81.14, 0.80.5, 0.79.5, 0.77.8, 0.75.9, 0.74.6, 0.74.5, 0.73.14, 0.72.29, 0.71.2, 0.69.6, 0.69.3, 0.68.5)
rhcp (0.2.18, 0.2.17, 0.2.16, 0.2.15, 0.2.14, 0.1.9, 0.1.8, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3, 0.1.2)
rhcp_shell (0.2.12, 0.2.11, 0.0.9, 0.0.7, 0.0.6, 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1)

根据 RubyGem 指南,你应该使用 search关键字。所以命令可以是:

gem search rhc --all

如果你想要确切的名字,请使用:

gem search ^rhc$ --all

如果您想包括预发布版本使用 --pre

gem search ^rhc$ --pre

如果你使用 zsh,加上引号:

gem search '^rhc$' --all

为了扩展@eyalev 的回答,如果你想要一个每行一个版本的列表,这里有一个一行程序:

gem search '^rspec$' --all \
| grep -o '\((.*)\)$' \
| tr -d '() ' \
| tr ',' "\n" \
| sort
0.0.10
0.1.0
0.1.1
# etc.

为了让它更具有可重用性,您可以编写一些函数(原谅我的 bash 技能有限) :

function extract_gem_versions() {
echo "$1" \
| grep -o '\((.*)\)$' \
| tr -d '() ' \
| tr ',' "\n";
}


function gem_versions() {
local gem_name="$1";
local pattern="^${gem_name}$";
local vers_str="$(gem search ${pattern} --all)";
extract_gem_versions "$vers_str";
}


gem_versions rspec | sort
0.0.10
0.1.0
0.1.1
# etc.

更好的解决方案

gem search '^rhc$' --all

共享知识的动机

我看到了一个被接受的答案,却带来了意想不到的结果

gem info 提供了一个 --remote选项来只检查远程 gems 和 --all来显示所有已知的版本:

$ gem info rhc --remote --all


*** REMOTE GEMS ***


rhc (1.38.7, 1.38.4, 1.37.1, 1.36.4, 1.35.4, 1.35.3, 1.35.1, 1.34.2, 1.33.4, 1.32.2, 1.31.5, 1.30.3, 1.30.2, 1.29.7, 1.28.5, 1.27.4, 1.26.9, 1.25.3, 1.25.2, 1.24.4, 1.23.7, 1.22.5, 1.21.3, 1.20.3, 1.19.5, 1.18.2, 1.17.6, 1.16.9, 1.15.6, 1.14.7, 1.13.6, 1.12.4, 1.11.4, 1.10.7, 1.9.6, 1.8.9, 1.7.8, 1.6.8, 1.5.13, 1.4.8, 1.4.7, 1.3.8, 1.2.7, 1.1.11, 1.0.4, 0.98.16, 0.97.17, 0.96.9, 0.95.14, 0.95.13, 0.94.8, 0.93.19, 0.93.18, 0.92.11, 0.91.12, 0.91.11, 0.90.7, 0.90.6, 0.88.9, 0.87.8, 0.86.7, 0.85.12, 0.84.15, 0.84.13, 0.83.9, 0.82.18, 0.81.14, 0.80.5, 0.79.5, 0.77.8, 0.75.9, 0.74.6, 0.74.5, 0.73.14, 0.72.29, 0.71.2, 0.69.6, 0.69.3, 0.68.5)
Author: Red Hat
Homepage: https://github.com/openshift/rhc


OpenShift Client Tools

gem (list|search)提供类似的(--remote --all) ,但如果你正在寻找一个特定的宝石 --exact选项只寻找精确匹配:

$ gem search rhc --remote --all --exact


*** REMOTE GEMS ***


rhc (1.38.7, 1.38.4, 1.37.1, 1.36.4, 1.35.4, 1.35.3, 1.35.1, 1.34.2, 1.33.4, 1.32.2, 1.31.5, 1.30.3, 1.30.2, 1.29.7, 1.28.5, 1.27.4, 1.26.9, 1.25.3, 1.25.2, 1.24.4, 1.23.7, 1.22.5, 1.21.3, 1.20.3, 1.19.5, 1.18.2, 1.17.6, 1.16.9, 1.15.6, 1.14.7, 1.13.6, 1.12.4, 1.11.4, 1.10.7, 1.9.6, 1.8.9, 1.7.8, 1.6.8, 1.5.13, 1.4.8, 1.4.7, 1.3.8, 1.2.7, 1.1.11, 1.0.4, 0.98.16, 0.97.17, 0.96.9, 0.95.14, 0.95.13, 0.94.8, 0.93.19, 0.93.18, 0.92.11, 0.91.12, 0.91.11, 0.90.7, 0.90.6, 0.88.9, 0.87.8, 0.86.7, 0.85.12, 0.84.15, 0.84.13, 0.83.9, 0.82.18, 0.81.14, 0.80.5, 0.79.5, 0.77.8, 0.75.9, 0.74.6, 0.74.5, 0.73.14, 0.72.29, 0.71.2, 0.69.6, 0.69.3, 0.68.5)

gem info最多返回一个 gem; gem (list|search)可能返回多个 gem。如果您知道自己在寻找什么,那么 gem info似乎是理想的; 当 gem 名称不确定时,gem (list|search)可能会有所帮助。此外,gem list描述了自己搜索本地宝石,尽管它能够进行远程操作。

似乎没有命令/选项集只返回 gem 的可用远程版本。为了重复 @ Jared-beck给出的答案,我们可以通过文本操作提取它:

$ gem info rhc --remote --all | grep -o '\((.*)\)$' | tr -d '() ' | tr ',' "\n"
1.38.7
1.38.4
1.37.1
1.36.4
1.35.4
# ... truncated ...