gpt4 book ai didi

linux - Bash 内置哈希和命令搜索

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:21 27 4
gpt4 key购买 nike

当您键入命令但它未被识别为内部命令之一时,会发生什么情况?您得到的通常答案是 bash 将从搜索路径中查找它。即使是最近的专业教科书也可以为您提供这个答案。不幸的是,事实并非如此。Bash 将首先检查其自己的内置哈希表是否匹配,如果没有匹配,则读取搜索路径内容并将找到可执行文件的路径添加到哈希表中。首先使用哈希表的想法是避免重复搜索路径,从而加快速度。但是,这可能会导致看起来很奇怪的情况,正如我们在接下来的测试中看到的那样。
我们可以通过命令查看当前散列的内容:

hash
hash: hash table empty

如果您刚刚打开终端,您就会看到该答案。

让我们运行“date”并再次查看:

date
Tue Jan 20 14:13:42 AST 2015
hash
hits command
1 /bin/date

到目前为止一切正常。现在让我们将“日期”移至另一个位置。我们选择搜索路径中的目的地:

sudo mv /bin/date /usr/bin/date

让我们检查一下是否仍然能够运行“date”,应该可以找到它,因为该位置位于搜索路径中:

date
bash: /bin/date: No such file or directory

哎呀。当哈希表搜索结果是一个路径时(现在无效),Bash 根本不会尝试从搜索路径中查找。

功能描述于 Bash Reference Manual

您可以手动强制“hash”重新加载“date”的新位置

hash date

一切又恢复正常了。

当哈希表返回可执行文件的无效路径时,为什么 bash 无法在 $PATH 处搜索?

最佳答案

Why bash is not able to search at $PATH when hash table returns invalid path for an executable ?

这是因为 bash 仅当命令成功运行时才在 hash 表中添加条目。

如果您较早获得它:

hash
hits command
1 /bin/date

然后运行类似:

qwerty
-bash: qwerty: command not found

由于未找到 qwerty 命令,因此不会将其添加到 hash 表中。如果您再次运行 hash 您仍然会得到:

hash
hits command
1 /bin/date

表中未添加 qwerty 条目。因此,bash shell 的假设是,如果 hash 表(只不过是缓存)中有一个条目可用,那么可以使用该 hash 条目再次运行该二进制文件,并且 $PATH 不会被搜索。

关于linux - Bash 内置哈希和命令搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com