Redirecionando stdout de dois programas

9

Estou executando uma ferramenta de verificação de memória (prog1) em um código C ++ (prog2), os quais me dão uma saída enorme e detalhada. Para procurar alguns bugs, preciso salvar essa saída em um arquivo.

Eu tentei redirecionar o stdout para um arquivo:

prog1 prog2 > outfile.txt

Mas isso me dá um arquivo contendo a saída de prog2, enquanto a saída de prog1 ainda está indo para o terminal.

Alguém sabe uma maneira de especificar que eu quero ambas as saídas para ir para um arquivo? Gosta (prog1 prog2) > outfile.txt?

FJC
fonte

Respostas:

19

Há uma boa chance de que ele prog1esteja gravando sua saída em erro padrão. Você pode redirecionar as duas saídas para um único arquivo com

prog1 prog2 > outfile.txt 2>&1

ou você pode dividir as saídas com

prog1 prog2 > outfile.txt 2> errors.txt

Isso não separa a saída dos programas individuais , separa os canais de saída. Consulte Quais são os operadores de controle e redirecionamento do shell? para detalhes.

Se você olhar para prog1a documentação, poderá encontrar uma opção para solicitar que armazene sua saída em um arquivo nomeado. Por exemplo, com strace,

strace -o strace.txt prog2 > outfile.txt

armazenaria stracea saída strace.txte tudo gravado na saída padrão outfile.txt.

Stephen Kitt
fonte
5
2>&1tem que ir atrás > outfile.txt . A ordem dos redirecionamentos é importante.
Barmar
Nota para futuros leitores: @Barmar está absolutamente correto que a ordem relativa dos redirecionamentos é importante em relação um ao outro. Para aqueles menos familiares, a ordem dos redirecionamentos com relação aos argumentos do programa é importante apenas em alguns casos. O começo e o fim são locais comuns, mas o meio também acontece às vezes (por favor, não faça isso). echo >&2 hello worldé equivalente a echo hello world >&2. Mais informações aqui: tldp.org/LDP/abs/html/io-redirection.html
Morgen