Digitar Ctrl + C do terminal envia SIGINT
para o grupo de processos em primeiro plano. Se você quiser que wc
sobreviva a este evento e produza saída, você precisa ignorar o sinal.
A solução é executar wc
em um subshell e ter seu shell shell definido como SIGINT
a ser ignorado antes de executar wc
. wc
herdará essa configuração e não morrerá quando SIGINT
for enviado para o grupo de processos. O restante do pipeline vai morrer, deixando wc
lendo de um pipe que não tem processo no outro extremo. Isso fará com que wc
veja EOF
no canal e, em seguida, exibirá suas contagens e sairá.
ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | (trap '' INT ; wc)