it-swarm-ru.tech

Перенаправить весь вывод в файл

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

Есть ли способ перенаправить весь вывод в файл?

682
Rayne

Эта часть записывается в stderr, используйте 2> для ее перенаправления. Например:

foo > stdout.txt 2> stderr.txt

или если вы хотите в том же файле:

foo > allout.txt 2>&1

Примечание: это работает в (ba) sh, проверьте ваш Shell на предмет правильного синтаксиса

1084
Op De Cirkel

Все операционные системы POSIX имеют 3 потока : stdin, stdout и stderr. Stdin - это вход, который может принимать stdout или stderr. stdout является основным выходом, который перенаправляется с помощью >, >> или |. stderr - это вывод ошибок, который обрабатывается отдельно, так что любые исключения не передаются команде или записываются в файл, который может быть поврежден; обычно это отправляется в какой-либо журнал или сбрасывается напрямую, даже когда stdout перенаправлен. Чтобы перенаправить оба в одно и то же место, используйте:

command &> /some/file

EDIT: спасибо Заку за то, что он указал, что вышеупомянутое решение не является переносимым - используйте вместо этого:

*command* > file 2>&1 

Если вы хотите заставить замолчать ошибку, сделайте:

*command* 2> /dev/null
138
Bryan Agee

Чтобы получить вывод на консоль И в файл file.txt например.

make 2>&1 | tee file.txt

Примечание. &2>&1) указывает, что 1 - это не имя файла, а дескриптор файла.

78
Sagar Jain

Используйте это - "require command here" > log_file_name 2>&1

Подробное описание оператора перенаправления в Unix/Linux.

Оператор> обычно перенаправляет вывод в файл, но может быть на устройство. Вы также можете использовать >> для добавления.

Если вы не укажете число, тогда предполагается стандартный поток вывода, но вы также можете перенаправлять ошибки

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/ dev/null - это нулевое устройство, оно берет любой ввод и выбрасывает его. Может использоваться для подавления любого выхода.

43
Indrajeet Gour

Кредиты на osexp2003 и j.a. ...


Вместо того, чтобы положить

&>> your_file.log

за чертой в

crontab -e

Я использую

#!/bin/bash
exec &>> your_file.log
…

в начале сценария BASH.

Преимущество: у вас есть определения журнала в вашем скрипте. Хорошо для Git и т.д.

27
qräbnö

Это может быть стандартная ошибка. Вы можете перенаправить его:

... > out.txt 2>&1
15
Petar Ivanov

Команда:

foo >> output.txt 2>&1

добавляет в файл output.txt без замены содержимого.

15
ellockie

Вы можете использовать команду exec для перенаправления всех выводов stdout/stderr любых команд позже.

пример сценария:

exec 2> your_file2 > your_file1
your other commands.....
14
osexp2003

Используйте >> для добавления:

command >> file

7
khushi muhammad