Grava no fluxo de erro no loop while

1

Eu tenho aproximadamente o seguinte código:

cat infile | while read line; do
    echo 2> 'log ' $line
    echo $line
done > outfile

outfile é criado corretamente. No entanto, a saída do STDERR desapareceu: ela não é exibida no terminal nem em outfile . Se eu substituir a última linha acima por done > outfile 2> errfile , então errfile será criado, mas vazio.

Posso capturar a saída de erro de dentro do loop, de preferência transmitindo-a diretamente para o pai STDERR (o acima é parte de um script maior cujo fluxo de erro padrão é capturado por outro processo)?

    
por Konrad Rudolph 07.09.2012 / 15:19

2 respostas

5

Sua sintaxe está errada: deve ser >&2 não 2> .

    
por 07.09.2012 / 15:32
0

Seu exemplo não funciona porque dentro do loop você está redirecionando stderr com 2> . E quando você tenta redirecioná-lo novamente para fora do loop, não há mais nada no fluxo para redirecionar.

Parece que isso é o que você realmente queria fazer:

cat infile | while read line; do
    echo >&2 'log ' $line
    echo $line
done > outfile 2> errfile

Isso deve redirecionar todos os erros de dentro do loop while como esperado. A menos que você já tenha redirecionado os erros dentro do loop, como no exemplo da sua pergunta.

    
por 07.09.2012 / 15:41