web-dev-qa-db-ja.com

Ruby 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が最も高い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(主流)バージョンが必要です。

24
user636044
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;}'
6
NeronLeVelu

シンプルなソリューション(最新の安定バージョンを直接インストールします):

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

説明:

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

ハイフン-を含むすべてのバージョンを除外します。これは、すべて非MRIバージョンであり、プレリリースMRIバージョンです。次に、Ruby-buildの出力がバージョン番号の昇順ですでにソートされているため、最も高いことが保証されている最後のものを選択します。

42
mislav

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>

macOS 10.13.6での作業

2
Sathish

かなりの試行錯誤の末、私はこのリストから最新の安定版を入手する方法を見つけました。正しいパターンと最後のバージョンを取得するだけなので、これは完璧ではありませんが、作業は完了するはずです。バージョンが正しい限り、機能します。

これは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)
1
user636044

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。

0
kristianp