我注意到,当我编译存储在/usr/bin
eg中的打包程序的自定义构建时/usr/bin/emacs
,会which emacs
显示已经存在的可执行文件,尽管在我的./usr/bin/emacs
/usr/local/bin/emacs
/usr/local/bin
PATH
我需要登录和注销,或者在显示新的二进制文件screen
之前打开一个新框架。which emacs
这是因为一些缓存,还是有一些安全功能导致在再次登录之前引用现有路径?
编辑:
对于那些认为这个问题是重复的或由其他问题回答的人,例如 -如何清除 Bash 的可执行文件路径缓存?, hash 命令的目的是什么?,这个问题专门询问 a shell
,而不是 aboutbash
或hash
内置的命令bash
(我不知道),尽管它是大多数系统上的默认 shell。
还有其他的shell,例如,zsh
我使用的那个,fish
, ksh
, eshell
,ksh
还有许多其他新的shell,例如oilshell
进入市场,可以这么说。
所以我认为这个问题应该独立存在,一般是关于贝壳,而不是一个特定的外壳。
如果有理由这样做,经验表明这是明智的选择,或者它与经济或性能有关,而不是其他答案可能会详细说明。
我希望此编辑成为评论,但它们的长度有限。
是的,bash 和其他 shell 维护了一个“哈希”命令表,它通过尝试 PATH 变量中的所有内容来查找它,因此它不必每次都检查。像您一样对环境进行更改的人会发现该命令
hash -d NAME
很有用,或者hash -r
. 这些是 bash 命令,其他 shell 的执行方式可能有所不同。所以,
将要求 bash 忘记 emacs 路径,并且
会要求它忘记所有路径。我倾向于使用后者。