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
が最も高いrbenv install VERSION
リリースであるシェルスクリプトでコマンドx.x.x
を自動化することです。つまり、数字で始まり-something
で終わらないリストの最も高いエントリをVERSION
に自動的に置き換える必要があります。このリストから、2.2.2
が必要です。
コマンドx.x.x
で最も高いrbenv install x.x.x
バージョンを自動的に選択するために、シェルスクリプトに何を入れることができますか?
編集:Rubyはまだインストールされていないため、ソリューションはRubyではなくBashにある必要があります。
編集2:RubyのMRI(主流)バージョンが必要です。
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;}'
シンプルなソリューション(最新の安定バージョンを直接インストールします):
rbenv install $(rbenv install -l | grep -v - | tail -1)
説明:
rbenv install -l | grep -v - | tail -1
ハイフン-
を含むすべてのバージョンを除外します。これは、すべて非MRIバージョンであり、プレリリースMRIバージョンです。次に、Ruby-buildの出力がバージョン番号の昇順ですでにソートされているため、最も高いことが保証されている最後のものを選択します。
Rbenvを使用してインストールするときに、最初にRubyビルドを更新してRubyの最新バージョンを取得する必要があります。以下の手順に従ってください。
brew reinstall --HEAD Ruby-build
(rbenvがすでにインストールされている場合、brewはいくつかのエラーを介して、単純に先に進むことができます。brew unlink Ruby-build
およびbrew install --HEAD Ruby-build
)brew upgrade
rbenv install <required latest version>
かなりの試行錯誤の末、私はこのリストから最新の安定版を入手する方法を見つけました。正しいパターンと最後のバージョンを取得するだけなので、これは完璧ではありませんが、作業は完了するはずです。バージョンが正しい限り、機能します。
これは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)
Mineは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。