“找不到命令”和“没有这样的文件或目录”之间的区别?

“找不到命令”和“没有这样的文件或目录”之间的区别?

例如:

$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found

有什么不同?在这两种情况下,nodefoo都是无效命令,但 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

答案1

那是因为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

答案2

我在 Ubuntu Linux 16.04 上发现“没有这样的文件或目录”意味着您必须切换当前工作目录,而“找不到命令”意味着您必须使用 apt-get install xxxyyy_zzz 来解决问题。

相关内容