答案1
如果您之前在该 shell 调用中运行过某个程序,然后在$PATH
搜索列表中的较早目录中安装了该程序的另一个版本,则需要重置哈希,以便它在新位置找到它。否则,它将使用缓存在旧位置查找该程序。
如果程序安装在您的 中的 2 个目录中$PATH
,并且在运行后从较早的位置删除副本,您还需要重置哈希。否则,它会尝试在该位置找到它,并报告“没有这样的文件或目录”(我个人认为,当发生这种情况时,它应该自动清除哈希并进行全面搜索,但我尝试时没有发生这种情况)。
请注意,您实际上不必重置整个哈希,您可以使用:
hash name
强制它仅更新该名称的缓存条目,或者:
hash -d name
仅删除该缓存条目。这些操作不会影响其他所有缓存条目。
hash -r
修改后无需使用$PATH
,修改完成后会自动重置。
答案2
hash
是 bash 的内置命令。哈希表是 bash 的一项功能,通过将结果缓存在内存中,可以避免每次输入命令时都要搜索 $PATH。
因此当缓存/存储信息不再更新或有效,您可能需要重置它。
阅读有关这个好答案的更多信息在 Unix stackexchange 上。