shell每次都会遍历PATH中的所有目录吗?

shell每次都会遍历PATH中的所有目录吗?

如果 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

相关内容