Shell

如何在命令行中擷取信號?

  • September 8, 2014

我問了這個問題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

如果您回顧您連結到的原始問題:終止無限循環,您會注意到這種方法甚至也出現在此處。

引用自:https://unix.stackexchange.com/questions/153922