如果 shell 无法在 PATH 环境变量中提到的目录中找到可执行文件。它是否将此信息存储在某个地方以使后续调用更快,或者它再次搜索所有目录?
答案1
许多 shell 都会保存它们所执行的命令的记录有上找到的PATH
,这样他们就不需要PATH
在调用已知命令时探索所有条目。你可以看到这个例如在 Bash 或 Zsh 上运行
hash
命令。
某些 shell(例如 Tcsh)可能会仅有的考虑此命令记录:默认情况下,Tcsh 在启动时以及更新路径时扫描路径,并且不会再次查看路径(特别是在未找到命令时)。可以使用设置更改此autorehash
设置,并且发出rehash
命令也将导致再次扫描路径。
然而据我所知,没有 shell 会记住以下命令没有被发现了。这确保了,在遇到丢失命令时扫描路径的 shell 中,丢失的命令可以直接添加到 中的目录中PATH
,或者将其目录添加到PATH
变量中,并在下次调用时找到它们,而无需告知shell 再次扫描命令。
在更多情况下,添加已存在于 上的命令的新版本PATH
需要手动干预,而不是添加缺少的命令,因为 shell 很容易记住 上已存在的版本PATH
;在这种情况下,或者在使用新版本之前需要确定hash -r
目标。hash -d