我想用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
我的目标是在rbenv install VERSION
最高VERSION
版本的shell脚本中自动执行命令x.x.x
。换句话说,我需要自动替换列表中以数字开头且不以-something
结尾的最高条目VERSION
。从此列表中,我需要2.2.2
。
我可以在shell脚本中添加什么来自动选择x.x.x
命令中最高的rbenv install x.x.x
版本?
编辑:由于尚未安装Ruby,因此解决方案必须使用Bash而不是Ruby。
编辑2:我想要Ruby(主流)版本。
答案 0 :(得分:37)
简单解决方案(直接安装最新稳定版):
rbenv install $(rbenv install -l | grep -v - | tail -1)
说明:
rbenv install -l | grep -v - | tail -1
过滤掉包含连字符-
的所有版本,这是所有非MRI版本和预发布的MRI版本。然后选择最后一个,保证最高,因为ruby-build输出已按版本号升序排序。
答案 1 :(得分:6)
rbenv install -l | awk -F '.' '
/^[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+[[:space:]]*$/ {
if ( ($1 * 100 + $2) * 100 + $3 > Max ) {
Max = ($1 * 100 + $2) * 100 + $3
Version=$0
}
}
END { print Version }'
如果列表被排序,则更简单的sed(posix版本)就足够了
rbenv install -l | sed -n '/^[[:space:]]*[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}[[:space:]]*$/ h;${g;p;}'
答案 2 :(得分:1)
经过相当多的反复试验后,我想出了一种从这个列表中获取最新稳定版本的方法。这并不完美,因为它只是抓取了正确的模式和最后一个版本,但它应该完成工作。只要版本有序,它就会起作用。
这将产生2.2.2
rbenv install -l | grep -P "^ [[:digit:]]\.[[:digit:]]\.[[:digit:]]$" | tail -1
我们可以将结果插入rbenv install
,如下所示:
rbenv install $(rbenv install -l | grep -P "^ [[:digit:]]\.[[:digit:]]\.[[:digit:]]$" | tail -1)
答案 3 :(得分:0)
Mine类似于Anonymous的答案(但是因为我正在使用\ d而更短)。
rbenv install -l| grep -P "\s2.*(\.|\d)\d$" | tail -1
我想指定最新的jruby,这就是我使用“2”的原因,所以我可以用“jruby”代替2:
rbenv install -l| grep -P "\sjruby.*(\.|\d)\d$"|tail -1
您可以将jruby替换为其他字符串以获得不同类型的红宝石,例如: rbx,mruby。
答案 4 :(得分:0)
在使用rbenv安装时,应首先更新ruby-build以获取最新版本的ruby。 请执行以下步骤:
brew reinstall --HEAD ruby-build
(
如果已经安装了rbenv,brew可能会遇到一些错误,然后继续前进,只需
brew unlink ruby-build
和brew install --HEAD ruby-build
)brew upgrade
rbenv install <required latest version>
答案 5 :(得分:-2)
我宁愿在Ruby中使用bash而不是bash。
versions = `rbenv install -l`
versions.split("\s").select{|v| v.match( /^\d*\.\d*\.\d*$/ )}.last