Как получить вывод скрипта / программы в файл?
Я компилирую программу, используя 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.txtstderrпоток перенаправлен (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 и выводит это тоже.