Não entendo como o computador lê esse comando.
cat file1 file2 1> file.txt 2>&1
Se eu entendi, 2>&1
simplesmente redirecione o Erro Padrão para a Saída Padrão.
Por essa lógica, o comando lê para mim da seguinte maneira:
concatenar arquivos
file1
efile2
.envie
stdout
desta operação parafile.txt
.enviar
stderr
parastdout
.fim?
Não tenho certeza do que o computador está fazendo. Pela minha lógica, o comando deve ser
cat file1 file2 2>&1 > file.txt
mas isso não é correto.
bash
shell
command-line
io-redirection
file-descriptors
iDontKnowBetter
fonte
fonte
$
significa?var=$othervar
,$
introduz o nome da variável no lado direito. Em um redirecionamento como2>&1
,&
introduz o número do descritor de arquivo no lado direito. Estou dizendo que você pode pensar nisso como "arquivo 2 é igual a arquivo 1". (Mas existem dois tipos de iguais:<
significa "para leitura" e>
significa "para escrever".)A ordem do redirecionamento é importante e eles devem ser lidos da esquerda para a direita .
Por exemplo:
command 2>&1 >somefile
significa:stderr
(ou seja2
) para o destino atual destdout
(neste ponto, o terminal).stdout
para ir parasomefile
.Então, neste caso,
stderr
vai para o terminal estdout
vai para um arquivo, que não é o que você provavelmente deseja.Por outro lado,
command >somefile 2>&1
significa:stdout
parasomefile
stderr
para o mesmo destino questdout
(somefile
).Neste último caso, ambos
stderr
estdout
vá parasomefile
, o que provavelmente é o que você deseja.fonte
>&
Na verdade, significa duplicado, ele usa a chamada de sistema dup para mapear um novo descritor de arquivo para um arquivo já aberto.Portanto, você (na verdade o bash) deve primeiro abrir o novo stdout antes, dizendo "e redirecionar o stderr para qualquer stdout atualmente definido".
fonte
&
. você poderia incluir algumas referências a essa sintaxe ou, melhor ainda, alguns bons recursos no sistema dup acima mencionado?