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
.
令我困惑的是,我得到了不同的输出 运行 这个两行脚本:
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
.