[Ruby][rbenv] 特定のバージョンのアンインストールを禁止する


方法

rbenv hooks という機能を使う。

以下、rbenv は ~/.rbenv にインストールしていることを想定する。

まず ~/.rbenv/rbenv.duninstall という名前のディレクトリを作る。そして、そのディレクトリに .bash という拡張子で任意の名前のファイルを作成する。

$ mkdir ~/.rbenv/rbenv.d/uninstall
$ vim ~/.rbenv/rbenv.d/uninstall/prevent_uninstall.bash

作成した .bash ファイルの内容は次の通り。

~/.rbenv/rbenv.d/uninstall/prevent_uninstall.bash
#!/usr/bin/env bash

VERSIONS=(2.5.5 2.6.3)
SCRIPT=$(cat <<EOS
if [[ " ${VERSIONS[*]} " == *" $@ "* ]]; then
  echo "Ruby $@ はアンインストールできません。アンインストールしたい場合は $BASH_SOURCE を削除してください。"
  exit 1
fi
EOS
)

before_uninstall "$SCRIPT"

この状態で Ruby 2.6.3 をアンインストールしようとしてもできない。

$ rbenv uninstall 2.6.3
rbenv: remove /Users/quanon/.rbenv/versions/2.6.3? [yN] y
Ruby 2.6.3 はアンインストールできません。アンインストールしたい場合は /Users/quanon/.rbenv/rbenv.d/uninstall/prevent_uninstall.bash を削除してください。

参考