Bash
Bash 記住了被移動/刪除的執行檔的錯誤路徑
當我做
which pip3
我明白了
/usr/local/bin/pip3
但是當我嘗試執行時
pip3
,出現如下錯誤:bash: /usr/bin/pip3: No such file or directory
這是因為我最近刪除了該文件。現在
which
command 指向另一個版本,pip3
但/usr/local/bin
shell 仍然記得錯誤的路徑。我如何讓它忘記那條路?手冊
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