Перенаправление stdout из двух программ


9

Я использую инструмент проверки памяти (prog1) на коде C ++ (prog2), который дает мне огромный и подробный вывод. Чтобы отследить некоторые ошибки, мне нужно сохранить этот вывод в файл.

Я попытался перенаправить стандартный вывод в файл:

prog1 prog2 > outfile.txt

Но это дает мне файл, содержащий выходные данные prog2, в то время как выходные данные prog1 все еще идут в терминал.

Кто-нибудь знает способ указать, что я хочу ОБА выходы в файл? Как (prog1 prog2) > outfile.txt?

Ответы:


19

Есть хороший шанс, что prog1запись выводится в стандартную ошибку. Вы можете перенаправить оба вывода в один файл с помощью

prog1 prog2 > outfile.txt 2>&1

или вы можете разделить выходы с

prog1 prog2 > outfile.txt 2> errors.txt

Это не разделяет вывод отдельных программ , а разделяет выходные каналы. См. Каковы операторы управления и перенаправления оболочки? для деталей.

Если вы посмотрите на prog1документацию, вы можете найти опцию, чтобы сказать, чтобы она сохраняла свои выходные данные в именованном файле. Например, с strace,

strace -o strace.txt prog2 > outfile.txt

будет хранить straceвыходные данные в strace.txt, и все записано в стандартный вывод в outfile.txt.


5
2>&1должен идти после > outfile.txt . Порядок перенаправлений имеет значение.
Бармар

Примечание для будущих читателей: @Barmar абсолютно прав, что относительный порядок перенаправлений имеет значение по отношению друг к другу. Для тех, кто менее знаком, порядок перенаправлений в отношении аргументов программы имеет значение только в нескольких случаях. Начало и конец - общие места, но иногда бывает и середина (пожалуйста, не делайте этого). echo >&2 hello worldэквивалентно echo hello world >&2. Более подробная информация здесь: tldp.org/LDP/abs/html/io-redirection.html
Морген
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.