Как получить вывод скрипта / программы в файл?

Я компилирую программу, используя make, и хочу, чтобы вывод make был записан в файл. Я пытался использовать> оператор как

make > build_log.txt

и с помощью команды тройника, как

make | tee build_log.txt

но проблема в том, что часть выходных данных попадает в файл, а остальное продолжает появляться на экране.

Я могу просто скопировать / вставить текст из терминала в файл после запуска make, но это не решение.

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

1 ответ

Решение

Текст, который отображается в терминале, взят из stderr поток (2). Если вы просто make > build_log.txt, только stdout (1) поток перенаправляется на build_log.txt файл.

  • stdout является стандартным потоком вывода и имеет дескриптор файла номер 1. Это поток по умолчанию, перенаправляемый в оболочках.
  • stderr является стандартным потоком ошибок и имеет дескриптор файла № 2

Чтобы перенаправить stderr поток к этому build_log.txt файл тоже используйте:

make > build_log.txt 2>&1
  • make выполняется и
    • stdout поток перенаправлен (>) чтобы build_log.txt
    • stderr поток перенаправлен (2>) к stdout поток (&1), который был перенаправлен на build_log.txt

Порядок важен, вы не можете переключаться, переключать операторы перенаправления, как make 2>&1 > build_log.txt,

Альтернативная команда:

make 2>&1 | tee build_log.txt > /dev/null

Перенаправление на /dev/null необходимо скрыть вывод, tee пишет свой вклад в build_log.txt и выводит это тоже.

Другие вопросы по тегам