Перенаправить все выходные данные в файл
Я знаю, что в 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.