Como executar um comando enquanto registra a saída em um arquivo?

7

Eu tenho um aplicativo de console que precisa ser executado como parte da implantação de uma nova versão do aplicativo no meu servidor.

Este aplicativo de console foi projetado para gerar saída para o console e não pode ser alterado.

Gostaria de executá-lo normalmente, mas ter stdout e stderr conectados a um arquivo ao mesmo tempo em que são enviados para o console.

Como posso fazer isso no Linux?

    
por Benjamin 24.09.2013 / 11:30

3 respostas

7

Você pode usar tee . Por exemplo:

ls -l / | tee tmp.txt

Será impresso no stdout e tmp.txt conterá uma cópia da saída. Se você quiser incluir o stderr no tmp.txt:

ls -l / 2>&1 | tee tmp.txt
    
por 24.09.2013 / 11:35
10

Você pode usar o link tee

Para canalizar somente stdout

cmd | tee log.txt | less

Para canalizar stdout e stderr:

cmd >>(tee stdout.log) 2>>(tee stderr.log >&2)
    
por 24.09.2013 / 11:34
3

Existem várias maneiras de fazer isso.

  1. %código%. Isso enviará todas as saídas para um arquivo chamado nohup.out. Ele também capturará SIGHUPs. Então você pode fechar o shell e ele continuará funcionando. Se você quiser ver o que está acontecendo, então você pode seguir a saída com nohup 2>&1 application & .
  2. O comando tail -f nohop.out fará o mesmo sem impedir SIGHUP. C2h e goldilock já mencionam isso.
  3. Se você precisar apenas de uma rolagem limitada, tente tee . Isso é explicado em mais detalhes neste post .

Eu percebo que a tela é uma maneira de contornar, mas seus outros recursos são muito bons para implementações.

    
por 24.09.2013 / 14:57