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

ope*_*sas 129 ruby gem version

我试图找出指定gem的所有远程可用版本.

我试过用:

gem list rhc --remote
Run Code Online (Sandbox Code Playgroud)

但它显示:

*** REMOTE GEMS ***
rhc (0.84.15)
rhcp (0.2.18)
rhcp_shell (0.2.12)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ope*_*sas 198

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

gem list rhc --remote --all
Run Code Online (Sandbox Code Playgroud)

哪个回报:

*** 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)
Run Code Online (Sandbox Code Playgroud)

  • 还要注意"rhc"是一个正则表达式,所以如果你只想查看那个,你可以搜索`gem list ^ rhc $`并且"--remote"和"--all"标志可以缩写,合并为`gem list ^ rhc $ -ra` (50认同)
  • 请注意,您可以传递其他选项,即.获得你想要的最新预发布的phusion乘客:`gem list -ra --pre passenger`(-ra == --remote --all) (5认同)
  • @JoshuaCheek注意到像`zsh`这样的shell有更高级的解析,并且可以捕获以这种方式给出的正则表达式.为了更安全(如果把它放在脚本或自述文件中)是将它放在一个字符串中,以便我们确定我们将其传递给1-1,即`gem list'^ rhc $'`等. (5认同)

Eya*_*vin 30

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

gem search rhc --all

如果您想要确切的名称使用:

gem search ^rhc$ --all

如果要包含预发布版本,请使用 --pre

gem search ^rhc$ --pre

如果你正在使用zsh添加引号:

gem search '^rhc$' --all

  • 使用`--prelease"来查看测试版 (4认同)

Jar*_*eck 9

要扩展@ eyalev的答案,如果你想要每行一个版本的列表,这里是一个单行:

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

为了使它更具可重用性,你可以编写一些函数(原谅我有限的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.
Run Code Online (Sandbox Code Playgroud)