Bash
“找不到命令”和“沒有這樣的文件或目錄”之間的區別?
例如:
$ node -bash: /usr/local/bin/node: No such file or directory $ foo -bash: foo: command not found
有什麼不同?在這兩種情況下,
node
都是foo
無效的命令,但似乎 Unix 只是找不到node
二進製文件?解除安裝程序時,例如node
,有沒有辦法清理它,以便我得到$ node -bash: node: command not found
編輯:
命令的結果
type
:$ type node node is hashed (/usr/local/bin/node) $ type foo -bash: type: foo: not found
那是因為
bash
記住了您的命令位置,將其儲存在雜湊表中。解除安裝後
node
,雜湊表並沒有被清除,bash
仍然認為node
是在/usr/local/bin/node
,跳過PATH
查找,/usr/local/bin/node
直接呼叫,使用execve()
。由於何時node
不再存在,execve()
返回ENOENT
錯誤,表示沒有這樣的文件或目錄,bash
向您報告了該錯誤。在
bash
中,您可以從雜湊表中刪除一個條目:hash -d node
或刪除整個雜湊表(適用於所有 POSIX shell):
hash -r