複数のインストールと$ PATHの理解


17

Gitの古いバージョンがインストールされています:

/usr/bin/

最近、新しいバージョンをダウンロードしました:

/usr/local/bin

入力するとき:

which git

古いバージョンの場所を取得します。これは、$ PATH変数で/ usr / bin /が/ usr / local / binの前にあるためで、古いバージョンのgitが最初に「見つかった」からだと思います。

これをテストするために、古いバージョンのgitを「git_old」に名前変更しました。今私がタイプするとき:

which git

予想どおり、新しいバージョンの場所を取得します。しかし、私が入力するとき:

git --version

次のエラーが表示されます。

-bash: /usr/bin/git: No such file or directory

私のコンピューターがGitの古い場所を探すことに戻るのはなぜだろうか?

回答:


30

Bashは実行可能ファイルへのフルパスをキャッシュするため、$PATH毎回参照する必要がありません。

hash次のコマンドを使用して、キャッシュの内容を確認できます。

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git

このキャッシュは次の方法でクリアできますhash -r

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty

追加のリソース


2
wtfこれはすごいこと知らなかった。
djsmiley2k-CoW

1
他のほとんどのシェルは同じことを行いますhash -rが、キャッシュをリロードするためにすべてを使用するわけではありません。SSHなどの歌手は、rehash代わりにコマンドとして使用します。
モシェカッツ

PATH = $ PATHはキャッシュをクリアする必要があります。hash -rは必要ありません。
jrw32982はモニカをサポートします
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.