Usando a substituição de processo, envie stderr para processar

0

Eu tenho isso:

exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done )

echo "rolo"
>&2 echo "cholo"

se você executar esse script, isso resultará na seguinte saída:

stdout: rolo
stdout: stderr: cholo

como posso enviar apenas stderr para a segunda linha de substituição do processo? Eu não entendi.

Eu não entendo porque isso está acontecendo:

stdout: rolo
stdout: stderr: cholo # what lol

    
por Alexander Mills 08.05.2018 / 06:48

1 resposta

3

Você configura os redirecionamentos na ordem errada. A saída padrão da segunda substituição de processo (que prefixos com stderr: ) tem sua saída padrão prefixada pela primeira substituição do processo, porque foi executada posteriormente.

Tente isso:

exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )

echo "rolo"
echo "cholo" >&2

Isso gera

 stderr: cholo
 stdout: rolo

que é o que eu presumo que você quer.

    
por 08.05.2018 / 07:06