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