Bash
如何無限次擷取INT信號?
我正在通過基於 sed 的腳本輸出互動式命令 (ghci) 以添加一些顏色:
ghci | colorize.sh
colorize.sh
類似的東西在哪裡:#!/bin/bash trap '' INT sed '...some pattern...'
現在,如果我按 Ctrl-C,我只希望 ghci 接收它(它不會終止),並且我希望 sed 茁壯成長(或者可能重新啟動?)並且仍然處理 ghci 的輸出。
這個腳本不起作用,我不知道為什麼。
首先,讓我首先說這並不能回答您的問題,但我希望可以幫助澄清正在發生的事情。我懷疑你認為正在發生的事情可能並沒有真正發生。考慮這個簡單的例子:
# The 'writer' reads input from standard input and # echos it to standard output. It handles SIGINT by # printing INT to standard output. $ cat writer #!/bin/bash function foo() { echo "INT" } trap foo INT while read x; do echo $x; done # The 'reader' reads input from standard input and pipes what is # read to 'sed', which converts it to upper case. It ignores SIGINT. # When it receives EOF on standard input, it writes "done". $ cat reader #!/bin/bash trap '' INT cat | sed -e 's/\(.*\)/\U\1/' echo "done"
現在,當我同時執行兩者時,將輸出管道傳輸
writer
到reader
:$ ./writer | ./reader hello HELLO ^CINT ^CINT ^CINT world WORLD ^D done $
該
writer
腳本從標準輸入讀取數據並寫入標準輸出——管道。腳本從標準輸入(管道)reader
讀取並寫入標準輸出。當我點擊Ctrl-C
時,會writer
寫“INT”;忽略信號(reader
多次)。最終,我進入Ctrl-D
(EOF),然後writer
終止。當reader
接收到 EOF 時,它會終止並寫入“完成”。請注意,
reader
忽略 SIGINT 不止一次,並且在處理 SIGINTsed
時既不會中斷管道也不會中斷。writer