使用RBENV安装最新的Ruby版本



我想安装rbenv可用的最新稳定版本。此功能不会在rbenv本身中发生。

当我在外壳中运行命令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(主流)版本。

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

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

说明:

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

滤除包含连字符-的所有版本,该版本是所有非MRI版本和预发行MRI版本。然后选择最后一个,保证是最高的,因为Ruby-Build输出已经按版本编号上升。

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;}'

应该首先更新Ruby-build,以在使用RBENV安装时获取最新版本的Ruby。按照以下步骤:

  • brew reinstall --HEAD ruby-build(如果已经安装了RBENV,则可能会通过一些错误,然后继续前进并简单地
    • brew unlink ruby-build
    • brew install --HEAD ruby-build
  • brew upgrade
  • 然后您可以使用上述方法之一自动安装最新版本,或者简单地安装rbenv install <required latest version>

在MacOS 10.13.6

工作

经过相当多的反复试验,我找到了一种从此列表中获取最新稳定版本的方法。这不是完美的,因为它只是抓住正确的模式和最后一个版本,但应该完成工作。只要版本按顺序进行。

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

我的回答类似于匿名的答案(但由于我使用的 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,以获得不同类型的Ruby,例如rbx,mruby。

您可以使用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

我宁愿在ruby中做它,而不是在bash中。

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

相关内容

  • 没有找到相关文章

最新更新