Como enviar stderr para stdout com um pipe para outro comando?

6

Estou tentando capturar toda a saída de uma operação de criação e enviá-la para myprogram . Eu pareço apenas ser capaz de capturar parte disso. É isso que estou tentando:

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" | myprogram &2 > 1

Eu também tentei:

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" &2 > 1 | myprogram

Basicamente, quero enviar tudo para stdout e depois fazer algo com isso. Atualmente, estou capturando apenas parte da saída e a outra parte está indo para a tela. Como posso canalizar tudo para outro programa?

    
por cwd 05.10.2011 / 04:17

4 respostas

9

Como você tem dois comandos, seria melhor usar:

{ make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64"; } 2>&1 | myprogram

Ou

( make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" ) 2>&1 | myprogram

O make clean não está direcionando sua saída para o pipe, você desejará usar um dos dois acima para permitir que o shell redirecione a saída de ambas as chamadas make como uma.

    
por 05.10.2011 / 04:24
2

Você precisa redirecionar STDERR para STDOUT para todos os comandos. Então você pode canalizar tudo em myprogram .

( make clean 2>&1 && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" 2>&1 ) | myprogram
    
por 05.10.2011 / 04:24
1
(make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64") 2>&1 | myprogram
    
por 05.10.2011 / 04:24
0

Dependendo da complexidade do meu programa, você também pode tentar passar o seu make op para o myprogram, onde você lê o stdout e o stderr como stream separado.

Depende de quão complicado você deseja fazer meu programa.

A principal vantagem é ser capaz de lidar com stdout e stderr de forma independente, em vez de agrupar.

    
por 05.10.2011 / 07:15