2013-02-04 69 views
0

我有兴趣从命令行查询Ruby的最新稳定版的。我主要对“1.9.3p327”格式的字符串感兴趣。如何从命令行获取最新的稳定Ruby版本?

更新#1

为了澄清,我们的目标是一致查询最新的稳定版本,不管是1.9.3p327或3.0.2p392。

+1

你是什么意思你对这个字符串感兴趣? – sawa

+0

查看更新以获得澄清。 – user456584

回答

1

开始使用rbenv后回到此处。如果你已经安装了rbenv,下面的一行就可以做到这一点:

#!/usr/bin/env ruby 

puts `~/.rbenv/bin/rbenv install --list`.split("\n").map{|item| item.strip}.select{|item| item[/^\d*\.\d*\.\d*/]}.reject{|item| (item.include? '-') && !(item =~ /-p\d*$/)}.last 
1

喜欢的东西:

curl 'http://ftp.ruby-lang.org/pub/ruby/1.9/' | ruby ./extract-and-print-max-patchlevel.rb 

extract-and-print-max-patchlevel.rb脚本的执行是读者的练习,但这里是一个开始:

#!/usr/bin/env ruby 
maxpatch=0 
maxstr=nil 
STDIN.each_line do |line| 
    next unless line =~ /1\.9\.3-p(\d+)\b/ 
    patch = $1.to_i 
    if patch > maxpatch 
    maxpatch = patch 
    maxstr = $& 
    end 
end 
puts maxstr 

注意,它假定的Ruby 1.9.3是最新的,所以你可能想重新考虑一下。

+0

“它假定Ruby 1.9.3是最新的” - 不幸的是,这样做的目的是失败的。 – user456584

+0

@ user456584我认为可以通过对这个脚本进行一些修改来解决问题,让主要想法保持不变。我在一个** UPD **中描述了我的想法,[我的变体](mastics的答案)(http://stackoverflow.com/a/14693560/693538)。 – NIA

0

你可以玩sedawk。例如:

curl "http://ftp.ruby-lang.org/pub/ruby/1.9/" | sed -E 's/^.*"(ruby-)(1.9.3-p[0-9]+)(.*)".*$/\2/' | sed -e '/^1.*/!d' | sort | sed '$!d' 

我不sed专家,这里可能是更好的解决方案,但此行的作品。

0

@maerics'之间和@ YevgeniyAnfilofyev的答案选择,我发现了Ruby一个更正宗,把它变成一个内胆,假定从卷曲列表已经排序,所以我们只需要简单的最后行会议的条件:

curl 'http://ftp.ruby-lang.org/pub/ruby/1.9/' 2> /dev/null | ruby -e "puts STDIN.lines.map { |x| /1\.9\.3-p\d+\b/.match(x) }.compact.last[0]" 

或者,红宝石部分展开:

puts STDIN.lines.map do |x| 
    /1\.9\.3-p\d+\b/.match(x) # After such map we will get an array of MatchData or nils 
end.compact.last[0] # Then we remove nils using Array#compact, 
        # get last MatchData and retrieve matched string with [0] 

Followi在这个脚本中添加排序功能留给读者练习:)

UPD:当然,硬编码1.9.3是坏的,但如果我们替换每个数字1,9和3与\d,正则表达式似乎变得或多或少独立。另一个问题是我们只查看该ftp的.../ruby/1.9文件夹。如果我们先查看.../ruby文件夹,并使用正则表达式/\d\.\d\//查找所有版本号的文件夹,则这可能会得到解决。然后重复上述查询,加入所有文件夹的结果。但是,当然,这已经不能做成单线...

相关问题