何时使用 bash 重新散列 $PATH 中的可执行文件?

kev*_*rpe 9 bash path

Bash shell 有一个内置命令hash -r来重置$PATH可执行文件的内部缓存。

什么时候需要使用这个命令?

相关:如何使用 bash 重新散列 $PATH 中的可执行文件

Has*_*tur 7

hash是 bash 内置命令。哈希表是 bash 的一个特性,它通过将结果缓存在内存中来防止每次键入命令时都必须搜索 $PATH。

因此,当缓存/存储的信息不再更新或有效时,您可能需要重置它。

在 Unix stackexchange上阅读有关这个​​不错的答案的更多信息。


Bar*_*mar 5

如果您之前在该 shell 调用中运行过一个程序,然后在$PATH搜索列表中较早的目录中安装了它的另一个版本,则需要重置哈希值,以便它可以在新位置找到它。否则,它将使用缓存在旧位置查找程序。

如果程序安装在您的 2 个目录中$PATH,您还需要重置哈希,并且您在运行它后从较早的位置删除副本。否则,它会尝试在那个位置找到它,并报告“没有这样的文件或目录”(我个人认为它应该自动清除哈希并在发生这种情况时进行完整搜索,但是当我尝试时它没有发生)。

请注意,您实际上不必重置整个哈希,您可以使用:

hash name
Run Code Online (Sandbox Code Playgroud)

强制它仅更新该名称的缓存条目,或者:

hash -d name
Run Code Online (Sandbox Code Playgroud)

仅删除该缓存条目。这些保留所有其他缓存条目。

hash -r修改后不需要使用,修改$PATH完成后会自动重置。