Na seguinte cadeia de comandos canalizados, quando uma interrupção é enviada com Ctrl-C, ping
é possível imprimir suas estatísticas resumidas antes de sair, desde que tee
tenha o -i
sinalizador (ignore interrupts):
ping -D localhost 2>&1 | tee -a -i ping.log
No entanto, com outro comando na cadeia, ping
o resumo de 's não é impresso:
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
Como o acima pode ser feito para imprimir o resumo?
Tem sed
uma opção para ignorar interrupções? Em geral, como as interrupções podem ser tratadas normalmente com comandos canalizados?
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
A chamada
trap '' INT
diz ao shell para ignorar SIGINT. Oexec
é opcional, mas é bom ter, já que o processo de subshell não é mais necessário após o trap.