Bashは移動/削除された実行可能ファイルの間違ったパスを覚えています。

Bashは移動/削除された実行可能ファイルの間違ったパスを覚えています。

私がするとき

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シンボリックリンクではなく実行可能ファイルです。それでは実行してみてはいかがでしょうか?

答え1

ここでコマンドを実行すると実行可能ファイルの場所が記憶されるため、毎回再検索するbash必要はありません。PATHしたがって、実行可能ファイルを実行してから場所を変更すると、以前のbash場所が引き続き試行されます。これを確認できる必要があり、前の場所がhash -t pip3表示されます。

これを実行すると、hash -d pip3bashは古い場所を忘れ、次回の試行時に新しい場所を見つけるように指示します。

答え2

実行可能ファイルの場所を変更する場合(移動または別の場所に実行可能ファイルの新しいバージョンを提供することによって)、hash -d NAME強制bashを使用してPATHで再検索します。ただし、NAMEがキャッシュにない場合はエラーが発生するため、スクリプトの一部として次のように使用してください。

if hash -t $NAME >& /dev/null; then 
  hash -d $NAME
fi

関連情報