Bash

Bash 記住了被移動/刪除的執行檔的錯誤路徑

  • April 5, 2021

當我做

which pip3

我明白了

/usr/local/bin/pip3

但是當我嘗試執行時pip3,出現如下錯誤:

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

這是因為我最近刪除了該文件。現在whichcommand 指向另一個版本,pip3/usr/local/binshell 仍然記得錯誤的路徑。我如何讓它忘記那條路?

手冊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不是符號連結,而是執行檔。那麼它為什麼不執行呢?

當您在其中執行命令時,bash它會記住該執行檔的位置,因此不必PATH每次都再次搜尋。因此,如果您執行執行檔,然後更改位置,bash仍會嘗試使用舊位置。您應該能夠確認這hash -t pip3將顯示舊位置。

如果你執行hash -d pip3它,它將告訴 bash 忘記舊位置,並在下次嘗試時找到新位置。

更改執行檔的位置時(通過移動它或使執行檔的新版本在不同位置可用),使用hash -d NAME強制 bash 在 PATH 中再次查找它。但是,如果 NAME 不在記憶體中,這將出錯,因此作為腳本的一部分,請使用如下內容:

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

引用自:https://unix.stackexchange.com/questions/335801