Por que esse comando funciona para registrar a saída do script?

1

Este comando não armazena a saída do meu script no arquivo de log:

. myscript.sh | tee -a log_file.log

No entanto, este próximo comando armazena a saída no arquivo de log.

. myscript.sh 2>&1 | tee -a dash_log.log

Por que o segundo funciona e não o primeiro? AFAIK a única diferença é que eu disse bash para redirecionar stderr para stdout, e isso não deve fazer nenhuma diferença para o que acontece com stdout. No entanto, esse primeiro comando nem mesmo armazenaria a versão 'sem erros' do stdout no arquivo de log.

E no caso de ser importante: estou no Ubuntu 12.04 hospedado na AWS

EDIT: Isto foi causado por suposições errôneas de como o wget envia mensagens. Consulte link e link

    
por Trindaz 09.09.2013 / 03:51

2 respostas

4

Parece provável que o seu script esteja escrevendo a maior parte ou toda a saída para stderr. Isso é fácil de testar

myscript.sh > std.out
myscript.sh 2> err.out

veja o conteúdo de cada arquivo e seja educado.

I doubt it - the only output from the script comes from calls to wget

Em vez de duvidar, mais uma vez é fácil testar

$ wget http://serverfault.com >std.out
--2013-09-09 07:06:25--  http://serverfault.com/
Resolving serverfault.com... 198.252.206.16
Connecting to serverfault.com|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51867 (51K) [text/html]
Saving to: “index.html.6”

100%[=================================================>] 51,867   231K/s  in 0.2s

2013-09-09 07:06:26 (231 KB/s) - “index.html.6” saved [51867/51867]

Veja, a saída ainda é gravada no terminal e tente

 $ wget http://serverfault.com 2>err.out
 $

Q.E.D.

O comando wget escreve sua saída para stderr não stdout.

    
por 09.09.2013 / 07:48
1

Provavelmente precisaria ver o código, mas provavelmente é devido ao código escrito para stderr.

    
por 09.09.2013 / 05:24

Tags