rch850 の上澄み

技術的な話題とか、雑談とか。タイトルを上澄みに変えました @ 2020/09/02

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 コマンド打てばそっちが実行されるだろうと思ったら、そうならなかったわけです。

「これはキャッシュされてるのかなぁ」という勘が働いたわけですが、うまく検索できなかったのでついったーでぼやいていたところ、即返事が。

rch850PATH 環境変数内でのコマンド名の検索って、コマンド打った時点で解決されるんじゃないのか?link
W_Dee@rch850 キャッシュされることがあります。たとえば bash では hash コマンドで確認できますlink

なるほど!hash というコマンドが!hash コマンドは、引数なしで実行すると、キャッシュされているコマンドのフルパスを表示します。引数にコマンド名を指定すると、そのコマンドのキャッシュが削除され、再度 PATH 環境変数を使って解決し、キャッシュされます。ちなみに hash は bash が持っている命令のひとつです。