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

22 ruby bash shell sed rbenv

我想用rbenv安装最新的稳定版Ruby .rbenv本身不会发生此功能.

当我rbenv install -l在shell中运行命令时,我得到了一长串可用版本.该列表包含所有类型的条目.以下是部分列表,以展示格式和多样性:

$ 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
Run Code Online (Sandbox Code Playgroud)

我的目标是rbenv install VERSION在shell脚本中自动执行命令,其中VERSION是最高x.x.x版本.换句话说,我需要自动替换以数字开始,不是结束名单上最高的入门-somethingVERSION.从这个清单,我需要2.2.2.

我可以在shell脚本中添加什么来自动选择x.x.x命令中的最高版本rbenv install x.x.x

编辑:由于尚未安装Ruby,解决方案必须是Bash而不是Ruby.

编辑2:我想要Ruby(主流)版本的Ruby.

mis*_*lav 40

简单的解决方案(直接安装最新的稳定版):

rbenv install $(rbenv install -l | grep -v - | tail -1)
Run Code Online (Sandbox Code Playgroud)

说明:

rbenv install -l | grep -v - | tail -1
Run Code Online (Sandbox Code Playgroud)

过滤掉所有包含连字符的版本-,这是所有非MRI版本和预发布的MRI版本.然后选择最后一个,保证最高,因为ruby-build输出已按版本号升序排序.

  • 当我尝试将其分配给shell变量时,该值具有一些导致错误的前导空格.这解决了问题:LATEST_RUBY_VERSION ="$(rbenv install -l | grep -v - | tail -1 | tr -d'[[:space:]]')" (3认同)

Ner*_*elu 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 }'
Run Code Online (Sandbox Code Playgroud)
  • 采取最大的版本(排序或不排序)

如果列表被排序,则更简单的sed(posix版本)就足够了

rbenv install -l | sed -n '/^[[:space:]]*[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}[[:space:]]*$/ h;${g;p;}'
Run Code Online (Sandbox Code Playgroud)

  • 对于任何使用Debian的人来说都是一个注释(至少在Debian 8 Jessie中) - 由于某种原因,awk的默认版本不支持`[[:space:]]`.只需用`[\ t]`替换它就可以得到相同的结果. (2认同)