Onde prepend
imprime sua saída? Para stderr
ou para stdout
? Eu acho que a substituição do processo em cmd 2> >(procsub) | ...
herda o redirecionamento de stdout
definido pelo pipe.
Você precisaria fazer algo assim para redirecionar explicitamente a saída do comando de substituição do processo para stderr
novamente:
cmd 2> >(procsub >&2) | pipecmd
ou substitua o pipe por outra substituição de processo:
cmd 2> >(procsub) 1> >(pipecmd)
O último parece mais limpo para mim, mas neste caso toda a saída resultante vai para stdout
(do ambiente externo), e pelo menos o meu Bash retorna ao prompt antes que as substituições do processo sejam concluídas, então a saída fica misturado com o prompt.
O primeiro deles funciona:
$ bash someoutput.sh 2> >(sed -e 's/^/ERR:/' >&2) | sed -e 's/^/OUT:/'
ERR:error message
OUT:normal output
Mas lembre-se de que, após os redirecionamentos, a ordem original da saída de erro e a saída normal podem não permanecer no final. Meu script acima realmente imprimiu a string normal output
primeiro, mas às vezes a linha de erro aparece primeiro, como acima.