Bashは、移動/削除された実行可能ファイルへの誤ったパスを記憶します


29

私がする時

which pip3

私は得る

/usr/local/bin/pip3

しかし、実行しようとするpip3と、次のようなエラーが表示されます。

bash: /usr/bin/pip3: No such file or directory

これは、最近そのファイルを削除したためです。今whichの別のバージョンへのコマンドポイントpip3それはに位置しています/usr/local/binが、シェルはまだ間違ったパスを記憶しています。そのパスを忘れさせるにはどうすればよいですか?

whichマニュアルは述べています

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

/usr/local/bin/usr/binは両方ともPATH変数にあり/usr/local/bin/pip3、シンボリックリンクではなく、実行可能ファイルです。なぜ実行されないのですか?


内容は/usr/local/bin/pip3何ですか?
トーマス

以前pip3にそのシェルで実行して/usr/binから移動したことがありますか?
エリックルヌーフ

1
実行すると何が見えますhash -t pip3か?
エリックルヌーフ

1
@Eric Renouf hash -t pip3プリント/usr/bin/pip3
-spiderface

2
type特別な理由がない限り、常にを使用する必要がありますwhichtypeposixシェルに組み込まれwhich、シェルが何をするかを推測するのではなく、シェルが何をするかを示します。
イカロス

回答:


37

コマンドbashを実行すると、その実行可能ファイルの場所が記憶されるため、PATH毎回再度検索する必要はありません。したがって、実行可能ファイルを実行してから場所を変更してbashも、古い場所を使用しようとします。これを確認するとhash -t pip3、古い場所が表示されます。

実行hash -d pip3すると、bashに古い場所を忘れるように指示し、次回試行するときに新しい場所を見つけるはずです。


4
またはhash -r、テーブル全体をクリアします。
mattdm

はい、うまくいきました。質問のタイトルは関係ないので変更すると思いますwhich
スパイダーフェイス

1
ほとんどのbashのための@spiderfaceはそれを使用する方が簡単ですいただけますhelpので、ここでは、人間の代わりにhelp hash
エリックRenouf

3
@spiderface type hashはシェル組み込みであるため、独自のマニュアルページがないことを通知します。代わりに、bashのmanページを使用help hashまたは参照しhashてください。
-deltab

1
または、man...を組み込みたいので、本当に使いたい場合hashは、それを見つけbashたいでしょうman bash。しかし、manページが言うことは、本質的help hashにbashが言うことです。
MAP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.