使用rbenv安装Ruby的最新稳定版本

时间:2015-05-11 23:52:51

标签: ruby bash shell sed rbenv

我想用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(主流)版本。

6 个答案:

答案 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>

在macOS 10.13.6中工作

答案 5 :(得分:-2)

我宁愿在Ruby中使用bash而不是bash。

versions = `rbenv install -l`
versions.split("\s").select{|v| v.match( /^\d*\.\d*\.\d*$/ )}.last