50. hash
bash shell 有一个哈希表,您执行的命令存储在其中。 完整路径包含在哈希表中。
当您下次执行相同的命令时,bash 不会搜索
PATH
变量,而是从哈希表中获取命令并运行它。
下面显示的示例序列对此进行了演示。 不带任何参数的hash
命令显示哈希表的内容。 在此示例中,它是空的,因为我们刚刚开始会话。
$ hashgit
hash: hash table empty
执行命令,例如 ls
:
$ ls
现在hash
命令将显示包含两个字段的哈希表:
- 命令的总命中次数
- 命令本身带有完整路径。
以下输出显示/bin/ls
到目前为止已被执行 1 次,并且它是现在哈希表中唯一的命令。
下次执行ls
命令时,bash 将不会搜索
PATH
变量,它只会从哈希表中获取命令的完整路径并执行它。
$ hash
hits command
1 /bin/ls
执行其他命令,例如cat
:
$ cat /etc/passwd
再次查看哈希表。 现在,您将看到两个条目。
$ hash
hits command
1 /bin/cat
1 /bin/ls
再次执行ls
命令几次。
$ ls
$ ls -l
再次查看哈希表。 您仍然会看到两个条目,但ls
命令命中计数器将显示 3,因为到目前为止我们在此会话中执行了 3 次 ls
。
$ hash
hits command
1 /bin/cat
3 /bin/ls
您还可以将命令添加到哈希表而不执行它。 下面将把 tar
命令添加到哈希表中。
$ hash tar
由于 tar
命令被添加到哈希表中而不执行它,因此 tar
命令的命中将为 0,如下所示。
$ hash
hits command
1 /bin/cat
0 /bin/tar
3 /bin/ls