ググったやつは余計な文字が含まれていたので改良版。
前提
rbenvをインストールしておくこと。
ワンライナー
rbenv install $(rbenv install -l 2>/dev/null | grep -v - | tail -1)
rbenv install $(rbenv install -l 2>/dev/null | grep '^[0-9]+.[0-9]+.[0-9]+$' | tail -1)
分解
まずはインストール可能なバージョン一覧を取得する。ここからStable最新版だけを入手したい。
rbenv install -l
2.6.8 2.7.4 3.0.2 jruby-9.3.1.0 mruby-3.0.0 rbx-5.0 truffleruby-21.2.0.1 truffleruby+graalvm-21.2.0 Only latest stable releases for each Ruby implementation are shown. Use 'rbenv install --list-all / -L' to show all local versions.
ググったら以下コードが見つかった。
rbenv install -l | grep -v - | tail -1
grep -v -
は-
が含まれている行を除外する。jruby-9.3.1.0
などがそれ。どうやら特殊な処理系のものは-
がついているらしい。なのでgrep -v -
にて特殊な処理系を除外している。
実行すると以下のようになった。まだ余計なテキストが含まれている。
Only latest stable releases for each Ruby implementation are shown. Use 'rbenv install --list-all / -L' to show all local versions. 3.0.2
余計なテキストはstderrの内容だと思われるので、/dev/null
で捨てる。
rbenv install -l 2>/dev/null | grep -v - | tail -1
3.0.2
OK。
このままでもいいが、ちょっと変える。条件は以下のほうがわかりやすい。特殊な処理系に-
がつくというルールは将来変更される可能性もある。なのでもっと明確に書く。
rbenv install -l 2>/dev/null | grep '^[0-9]+.[0-9]+.[0-9]+$' | tail -1
3.0.2
関数化する。
RubyStableVersion() { rbenv install -l 2>/dev/null | grep '^[0-9]+.[0-9]+.[0-9]+$' | tail -1; }
インストールコマンドに渡す。
rbenv install $(RubyStableVersion)
関数化しないのであれば以下のうちどれか。
rbenv install $(rbenv install -l 2>/dev/null | grep '^[0-9]+.[0-9]+.[0-9]+$' | tail -1)
rbenv install $(rbenv install -l 2>/dev/null | grep -v - | tail -1)
所感
こういうのは専用コマンドで用意していてほしい。以下みたいに。ていうか引数stable
がなければ自動的に最新安定版をインストールしてほしい。あるいはそうしていいですか?[y/n]
みたいな入力を受け付けて提案してほしい。
rbenv install stable
$ rbenv install 最新安定版 3.0.2 をインストールしますか? [y/n]:
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux