我想安装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