Bash Hash 命令

17 Mar 2025 | 4 分钟阅读

在类 UNIX 操作系统中,hash 是 bash shell 的一个内置命令,用于列出最近执行命令的哈希表。它用于查看、重置或手动更改 bash 路径哈希。它保存了最近执行的程序的位置,并在我们想要查看时显示它们。它提供了每个命令名称的完整路径名。

换句话说,当任何命令在未指定其路径的情况下执行时,shell 开始在路径变量中列出的目录中搜索该命令。当 Bash 找到该命令时,它会将该位置保存在哈希表中,以便记住该命令的位置。之后,Bash 开始检查该表以查找命令的位置,而不是再次查找该命令。这使得命令运行速度更快。但是,如果在将命令的位置记录在表中后移动了该命令,则 shell 将无法找到该命令。在这种情况下,将执行路径中目录的完整搜索以获取命令数据。

内置的“hash”命令负责维护哈希表。在没有任何开关的情况下,hash 会列出以前使用的命令、它们的位置以及它们在会话期间执行的次数。

语法

上面的语法用于确定和记住每个 command_name 的完整路径名。如果没有参数,它会显示有关以前使用的命令及其位置的信息。

选项

-d忘记 command_name 的记住的位置。
-l显示可以再次用作另一个程序输入的信息。
-p使用 pathname 作为 command_name 的完整路径。
-r忘记所有记住的位置。
-t打印每个 command_name 的记住的位置。如果给出了多个 command_name,则在每个位置前加上相应的 command_name
command_name指定的每个 command_name 都在 path 环境变量中搜索,如果找到,则添加到记住的命令列表中。

退出状态

hash 命令成功返回“0”。非零值表示未找到 command_name,或者给出了无效选项。

列出 Bash 哈希表

我们可以通过调用不带任何参数的 hash 来显示当前会话的哈希表。


Hash Command

在这里,hash 命令显示命中次数(该命令的调用次数)以及会话期间的命令及其路径。所有命中的总和被认为是通过路径保存的搜索次数。

注意- 如果打开一个没有执行任何命令的新会话,则该会话将没有哈希表。输出将如下所示

Hash Command

如果我们使用 -l 选项,那么它将以可用作输入的格式显示哈希表,即:


Hash Command

我们还可以使用 -t 选项打印会话期间使用的命令的记住的位置。

Hash Command

我们还可以打印由空格分隔的多个命令的位置,即:

Hash Command

将命令路径和名称添加到 Bash 哈希表

我们可以将项目添加到哈希表中,以便在 shell 中再次使用。应该记住,哈希表仅存在于 shell 的当前活动会话中。如果我们打开一个新的 shell,bash 将根据该 shell 的执行命令创建一个新的哈希表。

当我们开始运行第一个命令时,bash 立即开始创建哈希表。要将命令添加到哈希表,我们可以使用 -p 选项,后跟路径,然后是名称。这样,我们可以像使用别名一样使用哈希表。以下示例中,我们将 /home/bash.sh 脚本添加到哈希表,名称为“bash”。

Hash Command

将 /home/bash.sh 添加到哈希表并映射名称“bash”后,我们可以直接通过名称“bash”调用它

Hash Command

Bash 检查哈希表中的命令名称以查找可执行文件。通常,除非我们希望该脚本在新 shell 中可用,否则无需将其放入路径中。

从哈希表中删除项目

我们还可以选择删除或忘记哈希 bash 中命令的记住的位置。我们可以简单地使用 -d 选项,后跟名称来执行此任务

Hash Command

在这里,我们从哈希表中删除了 /home/bash.sh,该哈希表映射了名称“bash”。

清除哈希表

要清除哈希表,我们可以使用 -r 选项。

Hash Command

在这里,可以看到使用 -r 选项成功清除了哈希表。


下一主题#