PATH の優先順位に悩まされるたときに which
which コマンドを使うと 環境変数 PATH にあるコマンドのうち、最初に見つかったもの(実行されるもの)を表示してくれます。
which python
どのコマンドが実行されるのか調べるのに便利ですし、よく使ってると思います。
同名のコマンドで上書きされてないか?
pyenv や nvm や rbenv などを使っていると、あれ?バージョンが合わない?パスがおかしい????
などという事がよくあります。
こういうときにPATHに含まれる全てのもの列挙できたらと思いませんか
すべてを表示する which -a / --all
コマンドがいくつも同じ名前で入っている場合に、全てを表示してくれます。
表示順は、PATHの優先順位が高い順に表示してくれます。
takuya@-api$ which -a grep /Users/takuya/.bin/grep /usr/bin/grep
takuya@-api$ which -a java /usr/bin/java
takuya@-api$ which -a python /Users/takuya/.pyenv/shims/python /usr/local/bin/python /usr/bin/python
これをすることで、 python が同名でいくつもあることがわかったり、$PATHに同じパスが重複していたり、bashrc や pipenv shell などで .bashrc の意図した動作にならない。 順序がおかしくなっていることに気づくことができます。
関連資料
https://takuya-1st.hatenablog.jp/entry/2017/04/06/153337
参考資料
- which -h