como obter saída de um script / programa em um arquivo?

6

Estou compilando um programa usando make e quero que a saída de make seja gravada em um arquivo. Eu tentei usar o > operador como

make > build_log.txt

e usando o comando tee como

make | tee build_log.txt

mas o problema é que parte da saída entra no arquivo, mas o resto continua aparecendo na tela.

Eu posso simplesmente copiar / colar o texto do terminal em um arquivo depois de executar o make, mas isso não é uma solução.

Então, minha pergunta é como salvar, ou seja, redirecionar all a saída para o arquivo, para que ele entre no arquivo apenas sem aparecer na tela.

    
por binW 16.06.2011 / 11:49

1 resposta

10

O texto exibido no terminal vem do stderr stream (2). Se você fizer apenas make > build_log.txt , somente o fluxo stdout (1) será redirecionado para o arquivo build_log.txt .

  • stdout é o fluxo de saída padrão e tem o descritor de arquivo número 1. Esse é o fluxo padrão que está sendo redirecionado em shells.
  • stderr é o fluxo de erro padrão e possui o descritor de arquivo número 2

Para redirecionar também o fluxo stderr para esse arquivo build_log.txt , use:

make > build_log.txt 2>&1
  • make é executado e
    • o fluxo stdout é redirecionado ( > ) para build_log.txt
    • o fluxo stderr é redirecionado ( 2> ) para o fluxo stdout ( &1 ), que foi redirecionado para build_log.txt

A ordem é importante, você não pode alternar entre os operadores de redirecionamento como make 2>&1 > build_log.txt .

Comando alternativo:

make 2>&1 | tee build_log.txt > /dev/null

O redirecionamento para /dev/null é necessário para ocultar a saída, tee grava sua entrada para build_log.txt e também o gera.

    
por Lekensteyn 16.06.2011 / 11:59