gwg*_*gwg 33 command-line bash executable
例如:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Run Code Online (Sandbox Code Playgroud)
有什么不同?在这两种情况下,node
和foo
无效的命令,但它似乎像Unix那样只是找不到node
二进制?卸载程序时,例如node
,有没有办法清理它,以便我得到
$ node
-bash: node: command not found
Run Code Online (Sandbox Code Playgroud)
编辑:
type
命令的结果:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
Run Code Online (Sandbox Code Playgroud)
cuo*_*glm 60
那是因为bash
记住了您的命令位置,将其存储在哈希表中。
卸载后node
,哈希表没有清除,bash
仍然认为node
是 at /usr/local/bin/node
,跳过PATH
查找,/usr/local/bin/node
直接调用,使用execve()
. 因为 whennode
不再存在,execve()
返回ENOENT
错误,意味着没有这样的文件或目录,bash
向您报告该错误。
在 中bash
,您可以从哈希表中删除条目:
hash -d node
Run Code Online (Sandbox Code Playgroud)
或删除整个哈希表(适用于所有 POSIX shell):
hash -r
Run Code Online (Sandbox Code Playgroud)