Por que esse comando bash não está ecoando em uma variável e o que posso fazer para melhorar?

3

Eu tenho um script bash Estou trabalhando para melhorar, e coloquei uma ótima solução graças a Dennis Williamson . Infelizmente, uma das linhas não mais ecoa em uma variável que eu possa manipular, e sim descarregar a saída diretamente. Eu vou ser bom para ir se eu corrigir isso.

Por que esse comando bash não está ecoando na variável $ result e o que posso fazer para melhorar?

  result=$( time wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com 2>&1; );

EDIT: Várias soluções que tentei

  result=$( { time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) } &2>1 );

  result=$( { time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) } );

  result=$( ( time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) ) );

EDIT2:

Estou repetindo uma linha como esta:

  echo "$date, $host, $result"

A data e o host estão corretos no momento. $ result não é.

Estou recebendo frases como esta:

3.887

Tue Feb 15 08:39:53 PST 2011, 192.168.0.2,

3.910

Tue Feb 15 08:39:57 PST 2011, 192.168.0.3,

Estou esperando linhas como esta:

Tue Feb 15 08:39:53 PST 2011, 192.168.0.2, 3.887

Tue Feb 15 08:39:57 PST 2011, 192.168.0.3, 3.910

    
por editor 15.02.2011 / 17:01

2 respostas

2

Você precisa de chaves ao redor de todo o comando dentro da substituição do comando, mas antes do redirecionamento:

result=$( { time wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com; } 2>&1; );

Isso captura a saída de time . Se você quiser capturar a saída de erro de wget (você já está salvando sua saída regular em um arquivo), precisará fazer algo um pouco diferente e dependerá exatamente do que você deseja fazer. Pode envolver descritores de arquivos extras ou simplesmente usar o redirecionamento que mostrei na minha resposta à sua outra pergunta (em vez de usar --output-document ).

    
por 15.02.2011 / 17:32
1

Eu acho que isso deve ir para o estouro de pilha, mas você tentou isso?

result=$( time (wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com 2>&1;) );
    
por 15.02.2011 / 17:24