例如:
$ 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
答案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 来解决问题。