Decodificando “arquivo prog 2 & 1”

3

Estou tendo alguma dificuldade em entender o constructo prog > file 2>&1 . Eu li que isso significa "Enviar stdout e stderr para o arquivo". Mas a minha pergunta é como?

Eu entendo que prog > file basicamente envia stdout para o arquivo. Eu também entendo que prog 2>&1 significa que o stderr deve ser enviado para stdout . Mas não consigo conectar os pontos por prog > file 2>&1 . Os especialistas aqui podem me ajudar a decodificar isso?

    
por Geek 23.07.2014 / 20:37

2 respostas

6

Você só precisa ler da esquerda para a direita:

  • > file - > redirecionar tudo de stdout para file . (Você pode imaginar que você tem um link ponto-a-ponto de stdout para file )
  • 2>&1 - > redirecionar tudo de stderr para stdout , que agora é apontado para file .

Então, conclusão:

stderr --> stdout --> file

Você pode ver uma boa referência aqui .

    
por 23.07.2014 / 20:45
2

O que você está perdendo? Você parece ter entendido tudo. O > file envia a saída para file e 2>&1 envia um erro padrão para a saída padrão. O resultado final é que stderr e stdout são enviados para file .

Para ilustrar, considere este script Perl simples:

#!/usr/bin/env perl
print STDERR "Standard Error\n";
print STDOUT "Standard Output\n";

Agora, veja sua saída:

$ foo.pl     ## Both error and out are printed to the terminal
Standard Error
Standard Output

$ foo.pl 2>file  ## Error is redirected to file, only output is shown
Standard Output  
$ foo.pl 1>file ## Output is redirected to file, only error is shown
Standard Error

$ foo.pl 1>file 2>&1 ## Everything is sent to file, nothing is shown.
    
por 23.07.2014 / 20:49