Sua sintaxe está errada: deve ser >&2
não 2>
.
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)?
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.
Tags bash io-redirection