Bash

“找不到命令”和“沒有這樣的文件或目錄”之間的區別?

  • June 14, 2016

例如:

$ 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

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