O Bash processa os descritores de arquivos na ordem inversa, da direita para a esquerda. Primeiro 2>2.txt
, depois 1>1.txt
e assim por diante ...
Eu tentei trocar o stdout e o stderr e redirecionar cada fluxo para os arquivos, no shell interativo do bash.
Usando o comando de agrupamento de chaves, ganhei a saída que eu quero. Mas eu não entendo porque quando eu não uso o comando Grouping, o resultado não é trocado.
$ # Using Grouping command. Swap operation is succeed.
$ { { echo stdout; echo stderr 1>&2; } 3>&1 1>&2 2>&3; } 1>1.txt 2>2.txt;
$ cat 1.txt
stderr
$ cat 2.txt
stdout
$ # Not using Grouping command. Swap is failed...
$ { echo stdout; echo stderr 1>&2; } 3>&1 1>&2 2>&3 1>1.txt 2>2.txt;
$ cat 1.txt
stdout
$ cat 2.txt
stderr
Meu entendimento da operação de troca de descritores de arquivos com relação ao comando acima foi o seguinte.
3>&1
: redireciona FD3 para FD1 (stdout) 1>&2
: redirecionar FD1 para FD2 (stderr) 2>&3
: redireciona FD2 para FD3 (stdout) 1>1.txt
: redireciona FD1 para 1.txt (FD1 aponta para stderr) 2>2.txt
: redireciona FD2 para 2.txt (FD2 aponta para stdout) Mas, no meu entendimento, acho que o resultado não deve mudar dependendo de se há chaves ou não.
Estou fazendo alguns mal-entendidos básicos? Por que os dois resultados de comando acima são diferentes?
Info meu env.
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
O Bash processa os descritores de arquivos na ordem inversa, da direita para a esquerda. Primeiro 2>2.txt
, depois 1>1.txt
e assim por diante ...
Tags bash io-redirection