Os números são descritores de arquivos e somente os três primeiros (começando com zero) têm um significado padronizado:
0 - stdin
1 - stdout
2 - stderr
Portanto, cada um desses números no seu comando se refere a um descritor de arquivo. Você pode redirecionar um descritor de arquivo para um arquivo com >
ou redirecioná-lo para outro descritor de arquivo com >&
O 3>&1
em sua linha de comando criará um novo descritor de arquivo e o redirecionará para 1
, que é STDOUT
. Agora, 1>&2
redirecionará o descritor de arquivo 1 para STDERR
e 2>&3
redirecionará o descritor de arquivo 2 para 3, que é STDOUT
.
Então, basicamente, você alternou STDOUT
e STDERR
, estas são as etapas:
- Crie um novo fd 3 e aponte para o fd 1
- Redirecionar o descritor de arquivo 1 para o descritor de arquivo 2. Se não tivéssemos salvado o descritor de arquivo em 3, perderíamos o destino.
- Redirecionar o descritor de arquivos 2 para o descritor de arquivos 3. Agora, os descritores de arquivo um e dois são alternados.
Agora, se o programa imprimir algo no descritor de arquivo 1, ele será impresso no descritor de arquivo 2 e vice-versa.