Ocultando mensagens de comando em um script de shell

2

Em um script bash , estou usando ferramentas como conntrack e tcpdump para gerar resultados para um arquivo, mas desejo ocultar a mensagem padrão exibida na primeira linha de saída na linha de comando depois de executar a comando / script.

mensagem:

conntrack v1.0.0 (conntrack-tools): 6 flow entries have been shown.

Depois de ler a página bash man, eu tentei coisas como:

conntrack -L|grep "dport=6439" &> /tmp/file

Não importa qual opção de redirecionamento eu tente, a mensagem conntrack indicando o número de entradas de fluxo sempre é exibida no shell em que executo o script. A mesma coisa vale para tcpdump , onde ele lista o dispositivo de captura e o número de pacotes capturados, etc.

É claro que eu poderia adicionar clear após os comandos conntrack ou tcpdump para ocultar rapidamente a saída, mas essa solução é feia.

Como posso ocultar esses tipos de mensagens?

    
por John B 17.07.2013 / 01:29

1 resposta

6

Essas mensagens são impressas como erros (stderr) em vez de saída regular (stdout).

Somente stdout é canalizado, não stderr. Então, tendo &> /tmp/file após grep, você está apenas mesclando a saída stdout e stderr de grep , ele não irá mesclar o stderr de conntrack

Para o seu exemplo, você provavelmente quer algo como:

conntrack -L 2>&1 | grep "dport=6439" > /tmp/file

stderr é o descritor de arquivo 2 e stdout é o descritor de arquivo 1. 2>&1 mescla stderr em stdout.

Colocando 2>&1 em conntrack , a saída é mesclada antes de ser canalizada para grep . Não há necessidade de mesclar novamente em grep .

    
por 17.07.2013 / 02:02

Tags