Rediriger stdout depuis deux programmes

9

J'utilise un outil de vérification de la mémoire (prog1) sur un code C ++ (prog2), qui me donnent tous deux une sortie énorme et détaillée. Afin de chasser certains bogues, je dois enregistrer cette sortie dans un fichier.

J'ai essayé de rediriger la sortie standard vers un fichier:

prog1 prog2 > outfile.txt

Mais cela me donne un fichier contenant la sortie de prog2, tandis que la sortie de prog1 va toujours au terminal.

Quelqu'un sait-il comment spécifier que je veux que les DEUX sorties soient vers un fichier? Comme (prog1 prog2) > outfile.txt?

FJC
la source

Réponses:

19

Il y a de fortes chances que l' prog1écriture de sa sortie sur l'erreur standard. Vous pouvez rediriger les deux sorties vers un seul fichier avec

prog1 prog2 > outfile.txt 2>&1

ou vous pouvez diviser les sorties avec

prog1 prog2 > outfile.txt 2> errors.txt

Cela ne sépare pas la sortie des programmes individuels , cela sépare les canaux de sortie. Voir Quels sont les opérateurs de contrôle et de redirection du shell? pour plus de détails.

Si vous regardez prog1la documentation de, vous pouvez trouver une option pour lui dire de stocker sa sortie dans un fichier nommé à la place. Par exemple, avec strace,

strace -o strace.txt prog2 > outfile.txt

stockerait stracela sortie de strace.txt, et tout ce qui est écrit sur la sortie standard outfile.txt.

Stephen Kitt
la source
5
2>&1doit aller après > outfile.txt . L'ordre des redirections est important.
Barmar
Remarque pour les futurs lecteurs: @Barmar a absolument raison de dire que l'ordre relatif des redirections est important les uns par rapport aux autres. Pour ceux moins familiers, l'ordre des redirections par rapport aux arguments du programme n'a d'importance que dans quelques cas. Le début et la fin sont des emplacements communs, mais le milieu se produit parfois aussi (veuillez ne pas le faire). echo >&2 hello worldest équivalent à echo hello world >&2. Plus d'infos ici: tldp.org/LDP/abs/html/io-redirection.html
Morgen