Redirecionar stdout para file e stderr para file e screen

4

Estou usando o valgrind para eliminar erros no meu programa. O memcheck de Valgrind é impresso em stderr. O que eu quero fazer é uma modificação para isso:

valgrind --tool=memcheck ./a.out >output 2>grindout

Mas também quero que a saída valgrind seja exibida na tela. Então a saída do programa vai para o arquivo. A saída Valgrind é colocada em moagem e exibida na tela. Como faço isso?

obrigado.

    
por Badministrator 14.09.2012 / 15:11

3 respostas

2

Você está procurando o comando tee . Infelizmente, há alguns truques em relação ao redirecionamento de stderr e stdout. O seguinte deve funcionar:

valgrind --tool=memcheck ./a.out 3>&1 2>&3 >output | tee grindout

Isso redireciona a saída padrão para output , move o erro padrão para um novo descritor de arquivo 3 , que aponta para stdout. tee pega este arquivo stdout e o imprime na sua tela e em gridnout .

    
por Jjed 14.09.2012 / 15:15
1

Use tee para isto, mas você precisa jogar alguns truques com o stdout / stderr.

valgrind --tool=memcheck ./a.out 2>&1 > output | tee grindout

Explicação: 2>&1 envia stderr para stdout e o stdout normal é enviado para o arquivo output . O programa tee transmite o stdin, mas também o salva no arquivo grindout .

    
por January 14.09.2012 / 15:21
-1

Eu tive esse mesmo problema. O problema foi causado pelo buffer. Você pode ler mais sobre isso aqui: link

Esta é a solução que funcionou para mim:

stdbuf -o0 valgrind -v --tool=memcheck stdbuf -o0 ./a.out  2>&1 | stdbuf -o0 tee grindout

o 'stdbuf -o0' colocado na frente de cada um dos três programas executados faz com que eles desativem o armazenamento em buffer.

O problema nunca foi a saída que não estava sendo gerada, nem o problema de que ela não estava indo ao lugar certo. O problema era que não estava chegando lá no momento certo (devido ao buffering)

    
por Hakachukai 11.09.2017 / 17:29