rbenv など *env でどの設定 (global, local, shell) を参照しているか知る

rbenv *1rbenv version-origin というサブコマンドがあり、それは「rbenv がバージョンを決定するのに使われた設定」を出力する。

出力は次の3つのうちのいずれかとなる。すなわち:

  • global の設定
    • $HOME/.rbenv/version
  • ディレクトリごとの設定 (local)
    • $HOME/myproj/.rbenv-version
  • シェルのプロセス固有 *2 の設定 (shell)
    • RBENV_VERSION environment variable

つまり rbenv version-origin の出力が:

  • global の設定ファイルに一致するならば global
  • global の設定ファイルに一致せず、ファイルとして読取可能ならば local
  • それ以外は shell

という風になる。

それでこのような zshスクリプトを書いた。たぶん bash でも動く。

dotfiles/.zsh.d/functions/llenv_version_origin at 78327cd0349b53686cacada45b1252a2cd38a95f · aereal/dotfiles · GitHub

*1:以下、plenv や pyenv など anyenv で管理できるものについてはそれぞれに読み替える

*2:厳密には環境変数 RBENV_VERSION が export されているあいだ