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


9

Я запускаю інструмент перевірки пам’яті (prog1) для коду C ++ (prog2), який дає мені величезний та детальний вихід. Для того, щоб переслідувати деякі помилки, мені потрібно зберегти цей вихід у файл.

Я спробував перенаправити stdout у файл:

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.