PATH 環境変数と hash コマンド
とある環境での操作ログ。
$ python -V Python 2.3.4 $ which python /usr/local/bin/python $ /usr/local/bin/python -V Python 2.6.5
あるえー、おかしいなー。python コマンドの実行結果と which python の結果出てくる実行ファイルの実行結果が違うー。という話です。
もともとこの環境には python 2.3.4 が入ってました。その時のパスは /usr/bin/python。そこに python 2.6.5 をソースからインストールしたら、インストール先が /usr/local/bin/python になりました。で、which python が local のほうを指してるから、python コマンド打てばそっちが実行されるだろうと思ったら、そうならなかったわけです。
「これはキャッシュされてるのかなぁ」という勘が働いたわけですが、うまく検索できなかったのでついったーでぼやいていたところ、即返事が。
rch850 | PATH 環境変数内でのコマンド名の検索って、コマンド打った時点で解決されるんじゃないのか? | link | |
W_Dee | @rch850 キャッシュされることがあります。たとえば bash では hash コマンドで確認できます | link |
なるほど!hash というコマンドが!hash コマンドは、引数なしで実行すると、キャッシュされているコマンドのフルパスを表示します。引数にコマンド名を指定すると、そのコマンドのキャッシュが削除され、再度 PATH 環境変数を使って解決し、キャッシュされます。ちなみに hash は bash が持っている命令のひとつです。