📅  最后修改于: 2020-12-29 10:32:01             🧑  作者: Mango
在类似UNIX的操作系统上,哈希是bash shell的内置命令,用于列出最近执行的命令的哈希表。它用于在bash路径哈希中查看,重置或手动更改。它保留了最近执行的程序的位置,并在我们希望查看时显示它们。它提供每个命令名称的完整路径名。
换句话说,当执行任何命令时都没有命名其路径时,shell将开始在path变量中列出的目录中搜索该命令。当Bash获取该命令时,它将位置保存在哈希表中,以便它可以记住该命令的位置。之后,Bash开始检查表以查找命令的位置,而不是再次查找命令。它使命令运行得更快。但是,如果在将命令的位置记录在表中之后移动了该命令,则外壳将无法找到该命令。在这种情况下,将对路径中的目录进行完全搜索以获取命令数据。
内置的“ hash”命令负责维护哈希表。在没有任何开关的情况下,散列列出了先前使用的命令,它们的位置以及在会话期间执行它们的次数。
hash [-l] [-r] [-p pathname] [-d] [-t] [command_name . . .]
上面的语法用于确定和记住每个command_name的完整路径名。如果没有参数,它将显示有关先前使用的命令及其位置的信息。
-d | Forget the remembered locations of command_name. |
-l | Display the information that can be used again as an input for another program. |
-p | Use pathname as the full path of command_name. |
-r | Forget all the remembered locations. |
-t | Print the remembered location of each command_name. If multiple command_names are given there, precede each location with corresponding command_name |
command_name | Each command_name specified is searched for in the path environment variable, and if found, is added to the list of remembered commands. |
hash命令成功返回“ 0”。非零值表示找不到command_name,或者给出了无效的选项。
hash
在这里,hash命令显示命中次数(该命令的调用)以及该命令及其在会话期间的路径。所有匹配的总和被视为通过路径保存的搜索次数。
注-如果在没有执行任何命令的情况下打开了新会话,则该会话将没有哈希表。输出将如下所示:
如果使用-l选项,则它将以可以用作输入的格式显示哈希表,即
hash -l
我们还可以使用-t选项print在会话中记住的命令位置。
我们还可以print以空格分隔的多个命令的位置,即
我们可以将项目添加到哈希表中,然后可以在外壳中再次使用。应当记住,哈希表仅存在于外壳程序的当前活动会话中。如果我们打开一个新的shell,bash将根据该shell的已执行命令创建一个新的哈希表。
一旦开始运行第一个命令,bash即开始创建哈希表。要将命令添加到哈希表中,我们可以使用-p选项,后接路径和名称。这样,我们可以像使用别名一样使用哈希表。下面是一个示例,其中我们将/home/bash.sh脚本添加到名称为' bash '的哈希表中。
在将/home/bash.sh添加到具有映射名称'bash'的哈希表之后,我们可以直接使用名称'bash'来调用它:
Bash检查哈希表中的命令名称以找到可执行文件。通常,除非我们希望脚本在新的shell中可用,否则无需将脚本放在路径中。
我们还可以选择删除或忘记哈希bash中命令的记住位置。我们可以简单地使用-d选项后跟名称来执行此任务:
在这里,我们从哈希表中删除了/home/bash.sh ,该哈希表已映射为名称“ bash ”。
要清除哈希表,我们可以使用-r选项。
在这里,可以看到通过使用-r选项成功清除了哈希表。