
私はこれを尋ねる質問。SIGPIPE
答えの説明に従って、コマンドの実行を停止する信号を生成します。
しかし、どのようにしてこの信号を捕捉し、コマンドを正常に終了できますか?パイプが壊れたというエラーでコマンドが終了します。
[エラー] [Errno 32] パイプ破損
エラーメッセージを表示するかどうか
答え1
AFAIK、これらの信号を「キャッチ」する唯一の方法は、このtrap
コマンドを使用することです。特定の信号を受信したときに実行するタスク(関数またはコマンド)を具体的に設定します。
はい
#!/bin/bash
cleanup () {
...do cleanup tasks & exit...
}
trap "cleanup" SIGPIPE
### MAIN part of script
この方法は、1行の文やスクリプトで簡単に使用できます。 「関数」と呼ばれるものは、一見してもcleanup
簡単によく作られた一行になることができますSIGPIPE
。
$ trap "cmd1; cmd2; cmd3;" SIGPIPE
次のリンクされた元の質問を振り返ってください。無限ループ終了、この方法がそこにも現れることがわかります。