我正在閱讀一些命令解釋shell.com並找到一個有趣的指令:
:(){ :|:& };:
目前我正在使用OSX
它,我能找到的唯一參考是在builtin
手冊頁 ( man builtin
) 上,但這沒有幫助,因為它只說明它是外部命令、cshell 還是 sh 命令。
Command External csh(1) sh(1)
! No No Yes
% No Yes No
. No No Yes
: No Yes Yes
那麼,執行有什麼:
作用呢?
在終端機上我沒有輸出:
$ :
$
答案1
在本例中,:
它不是命令,而是您定義的函數的名稱。該命令:(){ :|:& };:
就是所謂的「forkbomb」 - 它是一個命令序列,定義了一個名為 的函數:
,告訴 shell 該函數包括呼叫:
、將輸出通過管道傳輸到 的另一個實例:
以及將第二個實例置於後台。最終;:
序列終止函數的定義,然後呼叫它。每次呼叫都會:
導致另外兩個副本:
運行,其速度與 shell 產生它們的速度一樣快。
這將導致耗盡所有系統資源,如果沒有設定進程限制,最終會導致系統變慢或崩潰。
答案2
如果你不redefine :
,它的預設意思是無操作。您可以使用以下命令查看其文檔help :
% help :
:: :
No effect; the command does nothing. A zero exit code is returned.
傳說很久以前,在網路剛興起的時候,這是一種將文字放入 shell 腳本中但不會被執行的方法。換句話說,一種評論。我沒有這方面的書面資料。