Bash 'type someCmd' :'hashed' 是什么意思? ('type mkdir' 的不同输出)

Bash 'type someCmd' : what means 'hashed'? (different outputs for 'type mkdir')

令我困惑的是,我得到了不同的输出 运行 这个两行脚本:

help | head -n1
type mkdir

来自 SciTE(这里是 SciTE 输出面板输出):

GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
mkdir is /bin/mkdir

并从终端 window(这里是终端输出):

GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
mkdir is hashed (/bin/mkdir)

同一个shell执行同一个脚本怎么会给出不同的输出呢?

视情况而定:

第一次bash在给定会话中执行外部实用程序仅按文件名(无论成功与否),它都会记住它的完整路径以便以后更快地重新执行(省去了在 $PATH 变量 中列出的所有目录中再次查找实用程序的需要).

这种记忆(缓存)称为散列并通过内置hash.

隐式发生

因此,mkdir 之前 在给定会话中执行 type mkdir returns:

mkdir is /bin/mkdir

在执行了至少一次mkdir之后type mkdir然后报告:

mkdir is hashed (/bin/mkdir)

您可以使用 hash -r 告诉 bash 到 "forget" 所有记住的路径,或者有选择地使用 hash -d <name>;仅 hash 打印所有当前散列路径及其命中数 - 参见 help hash.