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

Install Latest Stable Version of Ruby Using rbenv

我想在 rbenv 本身中安装 rbenv. This feature won't be happening 可用的最新稳定版本 Ruby。

当我在 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

我的目标是在 shell 脚本中自动执行命令 rbenv install VERSION,其中 VERSION 是最高 x.x.x 版本。换句话说,我需要自动将列表中以数字开头且不以 -something 结尾的最高条目替换为 VERSION。从这个列表中,我需要 2.2.2.

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

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

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

经过多次反复试验后,我找到了一种从该列表中获取最新稳定版本的方法。这并不完美,因为它只是获取了正确的模式和它的最新版本,但它应该可以完成工作。只要版本符合顺序,它就会工作。

这将产生 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)

我更愿意在 Ruby 中而不是在 bash 中这样做。

versions = `rbenv install -l`
versions.split("\s").select{|v| v.match( /^\d*\.\d*\.\d*$/ )}.last
rbenv install -l | awk -F '.' '
   /^[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+[[:space:]]*$/ {
      if ( ( * 100 + ) * 100 +  > Max ) { 
         Max = ( * 100 + ) * 100 + 
         Version=[=10=]
         }
      }
   END { print Version }'
  • 取最大版本(排序与否)

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

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

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

rbenv install $(rbenv install -l | grep -v - | tail -1)

解释:

rbenv install -l | grep -v - | tail -1

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

我的答案与 Anonymous 的答案相似(但更短,因为我使用的是 \d)。

rbenv install -l|  grep -P "\s2.*(\.|\d)\d$" | tail -1

我想指定最新的 jruby,这就是我使用“2”的原因,因此我可以将 2 替换为 "jruby":

rbenv install -l|  grep -P "\sjruby.*(\.|\d)\d$"|tail -1

您可以将 jruby 替换为其他字符串以获得不同类型的 ruby,例如rbx, mruby.

在使用 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 中工作

您可以为此使用 xxenv-latest 插件,它也适用于 nodenv、pyenv 等

你提到了自动化;这是我用来设置最新命令的完整列表 Ruby:

# Install rbenv
brew install rbenv

# Initialize rbenv to run now
eval "$(rbenv init -)"

# Install xxenv-latest rbenv plugin
git clone https://github.com/momo-lab/xxenv-latest.git "$(rbenv root)"/plugins/xxenv-latest

# Install latest Ruby and set as global
rbenv latest install
rbenv latest global