コマンドラインで信号をキャッチする方法は?

コマンドラインで信号をキャッチする方法は?

私はこれを尋ねる質問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

次のリンクされた元の質問を振り返ってください。無限ループ終了、この方法がそこにも現れることがわかります。

おすすめ記事