Como ignorar interrupções com comandos canalizados

1

Na seguinte cadeia de comandos canalizados, quando uma interrupção é enviada com Ctrl-C, ping é capaz de imprimir suas estatísticas de resumo antes de sair, contanto que tee tenha o sinalizador -i (ignorar interrupções) :

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

No entanto, com outro comando na cadeia, o resumo de ping não é impresso:

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

Como o texto acima pode ser feito para imprimir o resumo?

O sed tem uma opção para ignorar as interrupções? Em geral, como as interrupções podem ser tratadas de maneira elegante com comandos canalizados?

    
por adatum 12.09.2018 / 01:23

1 resposta

2

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

Chamar trap '' INT diz ao shell para ignorar o SIGINT. O exec é opcional, mas é bom ter, já que o processo subshell não é mais necessário após o trapping.

    
por 12.09.2018 / 01:52