Перенаправление 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
Морген