2017-03-16 57 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