以下のパイプラインコマンドチェーンで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
トラップ後にサブシェルプロセスが不要になるため、これをお勧めします。