Comment envoyer stderr à stdout avec un pipe à une autre command?

J'essaye de capturer toute la sortie d'une opération de construction et de l'envoyer à myprogram . Il me semble que je ne peux en capturer qu'une partie. C'est ce que j'essaie:

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

J'ai aussi essayé:

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

Fondamentalement, je veux tout envoyer à stdout et ensuite faire quelque chose avec ça. Actuellement, je ne capture qu'une partie de la sortie et l'autre partie passe à l'écran. Comment puis-je tout diriger vers un autre programme?

Puisque vous avez deux commands, il serait préférable d'utiliser:

 { 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 

Le make clean ne dirige pas sa sortie vers le pipe, vous voudrez utiliser l'un des deux ci-dessus pour laisser le shell redirect la sortie des deux make calls en un seul.

Vous devez redirect STDERR vers STDOUT pour toutes les commands. Ensuite, vous pouvez le canaliser dans myprogram .

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

En fonction de la complexité de mon programme, vous pouvez également essayer de passer votre make op au myprogram, dans lequel vous lirez stdout et stderr en tant que stream séparé.

Cela dépend de la complexité de votre programme.

Le principal avantage est de pouvoir gérer stdout et stderr indépendamment au lieu d'être regroupés.