아래 파이프라인 명령 체인에서 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
트랩 이후에는 서브쉘 프로세스가 더 이상 필요하지 않으므로 있으면 좋습니다.