【发布时间】:2015-07-22 15:42:56
【问题描述】:
我想安装rbenv 提供的最新稳定版Ruby。这个特性 won't be happening 在 rbenv 本身中。
当我在我的 shell 中运行命令 rbenv install -l 时,我会得到一长串可用版本。该列表包含所有类型的条目。以下是展示格式和多样性的部分列表:
$ rbenv install -l
Available versions:
2.0.0-p643
2.0.0-p645
2.1.0-dev
2.1.0-preview1
2.1.0-preview2
2.1.0-rc1
2.1.4
2.1.5
2.1.6
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
2.2.0-rc1
2.2.0
2.2.1
2.2.2
2.3.0-dev
jruby-1.7.19
jruby-1.7.20
jruby-9.0.0.0-dev
jruby-9.0.0.0+graal-dev
jruby-9.0.0.0.pre1
jruby-9.0.0.0.pre2
maglev-1.0.0
maglev-1.1.0-dev
maglev-2.0.0-dev
mruby-dev
mruby-1.0.0
mruby-1.1.0
rbx-2.5.2
rbx-2.5.3
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02
topaz-dev
我的目标是在 VERSION 是最高 x.x.x 版本的 shell 脚本中自动执行命令 rbenv install VERSION。换句话说,我需要自动将列表中以数字开头且不以-something 结尾的最高条目替换为VERSION。从这个列表中,我需要2.2.2。
我可以在我的 shell 脚本中添加什么来自动选择命令 rbenv install x.x.x 中最高的 x.x.x 版本?
编辑:由于尚未安装 Ruby,因此解决方案必须使用 Bash 而不是 Ruby。
编辑 2:我想要 Ruby 的 MRI(主流)版本。
【问题讨论】:
-
在我看来,您只想要列表中以数字开头的最后一个(因为您显然想要 MRI)并且没有
pre、dev或rc#在其名称)。这样的事情会起作用:lines.reverse_each.find {|version| version =~ /^\d/ && version !~ /pre|dev|rc\d/ } -
(我不能保证这将永远有效,但也许它会帮助您入门。如果您好奇 ruby-build 如何对列表进行排序,您可以在此处查看:@987654323 @)
-
感谢@Jordan 的 cmets。尽管尚未安装 Ruby,但我需要将结果保存在 Bash 中。很高兴知道排序算法,谢谢指出。
-
我发布了一个我想出的快速而肮脏的解决方案。如果有人想写一个更准确的答案,我很乐意接受。
-
您可以安装 Ruby 的 MRI 版本。只需使用 Rubinius 编译安装它的脚本。