Você deve ignorar o ^C
/ SIGINT
na função de pós-processamento:
preprocess(){
yes baa
}
postprocess(){
sed 's/a/z/g'
}
preprocess | { trap '' INT; postprocess; sleep 1; echo DONE; }
Quando você executar esse pipeline e pressionar ^C
, preprocess
será eliminado, mas postprocess
continuará em execução até que toda a saída produzida por preprocess
tenha sido consumida.
Observe que trap '' INT
(com uma string vazia como o manipulador) também ignorará SIGINT
nos subprocessos; não substituí-lo por exemplo. trap 'echo INT trapped' INT
porque isso fará com que qualquer sed
, etc. seja eliminado também por '^ C', apesar do sinal ser tratado no processo pai.