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

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

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

Ответ 1

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

foo > stdout.txt 2> stderr.txt

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

foo > allout.txt 2>&1

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

Ответ 2

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

command &> /some/fileудаp >

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

*command* > file 2>&1 

Если вы хотите отключить эту ошибку, выполните следующие действия:

*command* 2> /dev/null

Ответ 3

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

make 2>&1 | tee file.txt

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

Ответ 4

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

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

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

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

> 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 - это нулевое устройство, которое требует любого ввода, который вы хотите, и отбрасывает его. Он может использоваться для подавления любого выхода.

Ответ 5

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

... > out.txt 2>&1

Ответ 6

Кредиты для osexp2003 и j.a....


Вместо того, чтобы ставить

&>> your_file.log

за строкой в ​​

crontab -e

Я использую

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

в начале BASH script.

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

Ответ 7

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

образец script:

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

Ответ 8

Команда:

foo >> output.txt 2>&1

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

Ответ 9

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

command >> file

Ответ 10

В Linux Mint эта командная строка маршрутизировала выполнение script и ошибок в один файл txt. bash -x ./setup.sh > setup.txt 2>&1. script name был setup.sh, а выходным пунктом был setup.txt.