Normalmente, stderr
vai diretamente para o terminal e stdout
vai para o canal:
ls stdout -->
ls -ld /tmp /ooooooo | tr o X
|
v ls stderr (to terminal)
Depois de trocá-los, stdout
vai para o terminal e não para o pipe:
ls stderr -->
swap12 ls -ld /tmp /ooooooo | tr o X
|
v ls stdout
A troca de stdout
/ stderr
do tr
não envolve o stderr
de ls
resultante, pois foi redirecionado para fora do pipeline anteriormente.
ls stderr --> tr stderr -->
swap12 ls -ld /tmp /ooooooo | swap12 tr o X | tr o Z
| |
v ls stdout v tr stdout
Se você quiser processar os stdout
e stderr
de ls
separadamente, você pode usar a substituição de processos (deve funcionar no Bash e no Zsh):
$ ls -ld /tmp /ooooooo 2> >(tr o X) > >(tr o Z)
ls: cannXt access '/XXXXXXX': NX such file Xr directXry
drwxrwxrwt 25 rZZt rZZt 4096 Jul 1 14:40 /tmp/