反対側の端が消えると、シェルスクリプトは標準やその他のファイル記述子を失う可能性があります。これが発生する1つの方法は、ssh
スクリプトを起動するために使用されたクライアントをシャットダウンすることです。
$ ssh localhost test
^C
これにより、bash
SSH で呼び出されるスクリプトが開始され、a を使用してコマンドが終了します。これは連続を終了しませんが、添付ファイル記述子(標準入力/出力/エラーなど)を閉じます。test
CtrlCssh
test
閉じたファイル記述子を使用test
しようとするとSIGPIPE
。echo
標準エラーだけでなく、systemdログにもメッセージを記録する機能がある可能性がありtest
ます。このような:log
echo
log() {
echo "$*" | systemd-cat -t test
echo >&2 "$*"
}
2番目はセッションが終了した後にecho
a()を発生させます。問題なく実行が続くようにサブシェルに入れることで、このようなことが発生するのを防ぐことができます。SIGPIPE
ssh
CtrlCecho
echo
( echo >&2 "$*" )
しかし、もっと良い方法がありますか?
答え1
スクリプトでSIGPIPEを無視するには、次のようにします。
trap "" PIPE