如何从命令行获取最新的稳定Ruby版本?

时间:2013-02-04 17:39:16

标签: ruby shell terminal version command-line-interface

我有兴趣从命令行查询Ruby的最新稳定版本。我主要对形式为“1.9.3p327”的字符串感兴趣。

更新#1

澄清一下,目标是始终查询最新稳定版,无论是1.9.3p327还是3.0.2p392。

4 个答案:

答案 0 :(得分: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是最新版本,因此您可能需要重新访问它。

答案 1 :(得分: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

答案 2 :(得分: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专家,这可能是更好的解决方案,但这条线路可行。

答案 3 :(得分:0)

选择@maerics'和@ YevgeniyAnfilofyev的答案,我发现Ruby更多正宗并将其变成单行,假设curl的列表已经排序,所以我们只需要满足条件的最后行:

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]"

或者,Ruby部分扩展了:

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]

遵循良好的传统,在此脚本中添加排序作为读者的练习:)

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