2017-03-16 41 views
1

令我百思不解的是,(对于“键入mkdir”不同的输出),我收到运行此两班轮脚本不同的输出:从内赛特(这里的赛特输出面板输出)Bash'type someCmd':什么意思是'散列'?

help | head -n1 
type mkdir 

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

,并从终端窗口(这里是端子输出)内:

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

它是如何来,通过同一个shell执行相同的脚本给出不一样的输出?

回答

2

不同的是情景:

首次bash通过文件名在给定的会话执行的外部工具(无论成功与否),它会记住它更快的重新执行完整路径后面的(节省了在$PATH变量再次中列出的所有目录中查找实用程序的需求)。

这记忆(高速缓存)被称为散列,并通过内置hash隐含发生。

因此,mkdir以前是有史以来在给定的会话中执行type mkdir回报:

mkdir is /bin/mkdir 

已经执行mkdir至少一次后,type mkdir然后报告:

mkdir is hashed (/bin/mkdir) 

你可以告诉bashhash -r“忘记”所有记住的路径,或选择性地用hash -d <name>;只需hash即可打印当前散列路径及其命中数 - 请参阅help hash