簡介 hash命令是bash的內置命令。 我們知道在bash中執行外部命令,會根據環境變數PATH來逐一搜索命令的路徑。 hash就是用於記住命令的路徑,並且在下次執行命令的時候直接通過hash獲取而不再通過PATH一步步尋找,加快了尋找命令的速度。 hash就像是命令的緩存。 語法 語法中的nam ...
簡介
hash命令是bash的內置命令。
我們知道在bash中執行外部命令,會根據環境變數PATH來逐一搜索命令的路徑。
hash就是用於記住命令的路徑,並且在下次執行命令的時候直接通過hash獲取而不再通過PATH一步步尋找,加快了尋找命令的速度。
hash就像是命令的緩存。
語法
hash [-lr] [-p pathname] [-dt] [name ...]
語法中的name就是每個命令的名稱,例如:ls、grep、cat等。
選項與示例
當不使用任何選項和參數的時候,hash命令可以輸出當前所記住的命令以及其緩存命中次數。
一開始沒有執行外部命令的時候,hash是空的。
[root@C7 ~]# hash
hash: hash table empty
執行了幾個命令之後。如果某些命令有重覆執行,那麼命中數會大於1。
[root@C7 ~]# hash hits command 1 /usr/bin/grep 1 /usr/bin/tail 1 /usr/bin/head 2 /usr/bin/ls
-d:刪除已記住的命令的路徑。
[root@C7 ~]# hash hits command 1 /usr/bin/grep 1 /usr/bin/ls [root@C7 ~]# hash -d grep [root@C7 ~]# hash hits command 1 /usr/bin/ls
-l:也是輸出當前緩存中的內容,只不過輸出的格式可用於輸入或者再執行。
[root@C7 ~]# hash -l builtin hash -p /usr/bin/ls ls
-p pathname:為某個命令手動設置路徑。一般用於當命令的位置發生改變的情況。若出現該情況也可以使用-d刪除緩存再重新執行一遍。
註意:如果指定了一個錯誤的路徑的話,那麼命令就無法使用了,如下所示。
[root@C7 ~]# hash -p /tmp/grep grep [root@C7 ~]# hash hits command 0 /tmp/grep 0 /usr/bin/tail [root@C7 ~]# grep 'root' /etc/passwd -bash: /tmp/grep: No such file or directory
-r:清空緩存列表。
[root@C7 ~]# hash hits command 1 /usr/bin/sort 1 /usr/bin/cat 1 /usr/bin/ls [root@C7 ~]# hash -r [root@C7 ~]# hash hash: hash table empty
-t:顯示在緩存中,命令的對應路徑。命令不在緩存中則會報錯。
[root@C7 ~]# hash hits command 1 /usr/bin/head 1 /usr/bin/du 1 /usr/bin/cat 1 /usr/bin/less 1 /usr/bin/ls [root@C7 ~]# hash -t ls /usr/bin/ls [root@C7 ~]# hash -t less /usr/bin/less [root@C7 ~]# hash -t ls less grep ls /usr/bin/ls less /usr/bin/less -bash: hash: grep: not found
hash name:如果僅帶參數不帶選項的話,hash可用於清空具體命令的緩存命中次數。這個功能是不小心發現的,在“help hash”中並無說明。
[root@C7 ~]# hash hits command 1 /usr/bin/head 5 /usr/bin/wc [root@C7 ~]# hash wc [root@C7 ~]# hash hits command 1 /usr/bin/head 0 /usr/bin/wc