Перенаправить все выходные данные в файл [дубликат]


этот вопрос уже есть ответ здесь:

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

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

10 637

10 ответов:

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

foo > stdout.txt 2> stderr.txt

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

foo > allout.txt 2>&1

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

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

command &> /some/file

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

*command* > file 2>&1 

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

*command* 2> /dev/null

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

make 2>&1 | tee file.txt

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

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

кредиты на osexp2003 и J.а. ...


вместо

&>> your_file.log

за строки

crontab -e

Я использую

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

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

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

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

... > out.txt 2>&1

:

foo >> output.txt 2>&1

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

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

сценарий:

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

использовать >> добавить:

command >> file

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