パイプコマンドを使用して割り込みを無視する方法

パイプコマンドを使用して割り込みを無視する方法

以下のパイプラインコマンドチェーンでCtrl-Cを使用して割り込みを送信するとき(割り込みを無視)、フラグがある限り終了するping前に要約統計を印刷できます。tee-i

ping -D localhost 2>&1 | tee -a -i ping.log

ただし、チェーン内で別のコマンドを使用すると、ping要約は印刷されません。

ping -D localhost 2>&1 | sed -u 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "[`date -d @\1 +"%Y-%m-%d %H:%M:%S"`] \2"/e' | tee -a -i ping.log

要約を印刷するにはどうすればよいですか?

sed割り込みを無視するオプションはありますか?通常、パイプコマンドを使用して割り込みを正常に処理する方法は?

答え1

ping -D localhost 2>&1 | (trap '' INT; exec sed -u 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "[`date -d @\1 +"%Y-%m-%d %H:%M:%S"`] \2"/e') | tee -a -i ping.log

呼び出しはtrap '' INTシェルに SIGINT を無視するように指示します。オプションですが、execトラップ後にサブシェルプロセスが不要になるため、これをお勧めします。

関連情報