Shell
如何在命令行中擷取信號?
我問了這個問題。
SIGPIPE
生成信號以停止執行命令,如答案中所述。但是如何擷取這個信號並優雅地終止命令呢?該命令退出並顯示錯誤,指出它是一個損壞的管道。
$$ ERROR $$ $$ Errno 32 $$斷管
是否顯示錯誤資訊
AFAIK,“捕捉”這樣的信號的唯一方法是使用
trap
命令。當接收到特定信號時,您專門設置了要執行的操作(函式或命令)。例子
#!/bin/bash cleanup () { ...do cleanup tasks & exit... } trap "cleanup" SIGPIPE ### MAIN part of script
這種方法可以很容易地在單個單行與腳本中。被呼叫的“函式”
cleanup
,當SIGPIPE
被看到時也可以很容易地成為一個精心設計的單行程式碼。$ trap "cmd1; cmd2; cmd3;" SIGPIPE
如果您回顧您連結到的原始問題:終止無限循環,您會注意到這種方法甚至也出現在此處。