Reindirizzamento di stdout da due programmi


9

Sto eseguendo uno strumento di controllo della memoria (prog1) su un codice C ++ (prog2), entrambi i quali mi danno un output enorme e dettagliato. Per inseguire alcuni bug, devo salvare questo output in un file.

Ho provato a reindirizzare lo stdout su un file:

prog1 prog2 > outfile.txt

Ma questo mi dà un file contenente l'output di prog2, mentre l'output di prog1 sta ancora andando al terminale.

Qualcuno sa un modo per specificare che ENTRAMBI gli output vanno su un file? Come (prog1 prog2) > outfile.txt?

Risposte:


19

C'è una buona probabilità che prog1stia scrivendo il suo output su un errore standard. È possibile reindirizzare entrambi gli output su un singolo file con

prog1 prog2 > outfile.txt 2>&1

oppure puoi dividere le uscite con

prog1 prog2 > outfile.txt 2> errors.txt

Questo non separa l' output dei singoli programmi , separa i canali di output. Vedi Quali sono gli operatori di controllo e reindirizzamento della shell? per dettagli.

Se guardi prog1la documentazione, potresti trovare un'opzione per dirgli di archiviare il suo output in un file con nome. Ad esempio, con strace,

strace -o strace.txt prog2 > outfile.txt

memorizzerebbe stracel'output in strace.txt, e tutto ciò che è scritto nello standard output in outfile.txt.


5
2>&1deve andare dopo > outfile.txt . L'ordine dei reindirizzamenti è importante.
Barmar il

Nota per i futuri lettori: @Barmar ha assolutamente ragione che l'ordine relativo dei reindirizzamenti è importante l'uno rispetto all'altro. Per quelli meno familiari, l'ordine dei reindirizzamenti rispetto agli argomenti del programma conta solo in alcuni casi. L'inizio e la fine sono luoghi comuni, ma a volte accade anche il centro (per favore non farlo). echo >&2 hello worldè equivalente a echo hello world >&2. Maggiori informazioni qui: tldp.org/LDP/abs/html/io-redirection.html
Morgen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.