Antes de tudo, você precisa entender a sintaxe n>&m
. esta é uma operação de duplicação, significando a cópia m para n. confira a seção "3.6.8 Duplicando descritores de arquivo" .
Eu tive a mesma dúvida que você quando estudei o artigo. Então eu posso tentar explicar para você:
ls > dirlist 2>&1
com o comando acima, você primeiro redireciona a saída para a lista por > dirlist
. 2>&1
significa o descritor de arquivo de cópia de 1 a 2, em outras palavras, faz de fd2 uma cópia de fd1. Agora o fd1 já está apontado para o dirlist, fazendo do fd2 uma cópia do fd1 significa que o fd2 também aponta para o dirlist. Como resultado, fd1- > dirlist, fd2- > dirlist.
ls 2>&1 > dirlist
com isto, você primeiro faz a fd2 uma cópia do fd1 que ainda é o terminal, então fd2- > terminal. então você redireciona fd1 para dirlist. como resultado, fd2 - > terminal, fd1- > dirlist.