それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

which コマンドでPATHにある同名のコマンドを全部列挙する

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