私はこれを尋ねました 質問 。 SIGPIPE
シグナルは、回答に示されているようにコマンドの実行を停止するために生成されます。
しかし、この信号をキャプチャしてコマンドを正常に終了するにはどうすればよいですか?コマンドは、パイプが壊れているというエラーで終了します。
[エラー] [エルノ32]パイプの破損
表示されるエラーメッセージです
AFAIK、このような信号を「キャッチ」する唯一の方法は、trap
コマンドを使用することです。特定の信号を受信したときに実行するアクション(関数またはコマンド)を具体的に設定します。
#!/bin/bash
cleanup () {
...do cleanup tasks & exit...
}
trap "cleanup" SIGPIPE
### MAIN part of script
このアプローチは、単一のワンライナーとスクリプトで同じように簡単に行うことができます。 cleanup
が表示されたときにSIGPIPE
と呼ばれる「関数」も、同じように簡単に手の込んだワンライナーになる可能性があります。
$ trap "cmd1; cmd2; cmd3;" SIGPIPE
リンクした元の質問を振り返ると: 無限ループの終了 、このアプローチもそこに表されていることに気付くでしょう。