[O título deste post precisa de algum trabalho; sugestões de boas-vindas.]
O seguinte comando produz saídas diferentes no zsh v. 4.xe 5.x:
{
(
printf "X\nY\n"
printf "WARNING: foo\nWARNING: bar\n" >&2
printf "1\n2\n"
) 2>&1 >&3 | grep -v foo >&2
} 3>&1
(Este código deve ilustrar como suprimir seletivamente parte da saída enviada ao stderr por um programa; nesse caso, o aviso foo
está sendo suprimido seletivamente, enquanto o aviso bar
pode passar por ; observe que, no final, stderr
e stdout
streams permanecem separados.)
Em v 4.x, a saída que vejo no terminal é a desejada / esperada:
X
Y
1
2
WARNING: bar
(Você pode ver uma ordenação diferente da linha WARNING: bar
em relação aos outros.)
No v 5.0.7 (Debian) e 5.1.1 (Darwin), no entanto, o que eu vejo no terminal é este:
X
Y
1
2
WARNING: bar
X
Y
1
2
IOW, as linhas que devem ser enviadas para stdout
aparecem duas vezes.
Eu acho que existem três possibilidades:
- este é um bug no v. 5.x (nesse caso, minha pergunta é: existe uma solução alternativa?)
- Eu não configurei corretamente meu v. 5.x zsh (nesse caso, minha pergunta é: como devo configurar meu v. 5.x zsh para obter o comportamento desejado?);
- há um bug no v. 4.x, mas não no v. 5.x, que mascarou um bug no meu código (nesse caso, minha pergunta é: como eu poderia consertar meu código para obter o comportamento desejado em v 5.x?)