以下 bash 指令中的 !#(感嘆號雜湊)、!$:r:r(感嘆號美元冒號 r)、!#:t(驚嘆號雜湊)是什麼意思?

以下 bash 指令中的 !#(感嘆號雜湊)、!$:r:r(感嘆號美元冒號 r)、!#:t(驚嘆號雜湊)是什麼意思?

我一直在嘗試安裝 Nagios 軟體包,並在指南上偶然發現了這些奇怪的 bash 擴展這裡。有人可以幫助我理解擴充的含義嗎?維基連結也有助於將來參考。

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh

答案1

這些都是bash歷史擴展關鍵字。他們從 shell 歷史記錄中選擇一行並重新插入(部分)它(可能在修改後)。您連結到的網站對它們進行了合理的解釋,但它並沒有描述所有這些內容。

tar zxvf !#:t

實際上沒有意義:!#選擇到目前為止鍵入的行,但tar zxvf我們不想重複使用其中任何一個。它應該是

tar zxvf !$:t

它選擇上一行的最後一部分 ( !$),這是給 的 URL wget,並獲取文件名部分(:t,代表 tail - 嚴格來說,它是最後一個目錄分隔符 後剩下的內容,/它恰好與URL 配合得很好)。

然後

chown -R root:root !$:r:r

選擇上一行的最後一部分,刪除檔案副檔名(:r嚴格來說,它會刪除最後一個後面的所有內容.,包括.)兩次,這給了目錄名稱(假設tarball 包含一個與tarball 的基本名稱同名的目錄) )。chmod和命令cd以相同的方式進行。

相關內容