Я знаю это очень много:
$ command 2>> error
$ command 1>> output
Есть ли способ вывести stderr в файл ошибок и вывести stdout в выходной файл в той же строке bash?
Я знаю это очень много:
$ command 2>> error
$ command 1>> output
Есть ли способ вывести stderr в файл ошибок и вывести stdout в выходной файл в той же строке bash?
Ответы:
Просто добавьте их в одну строку command 2>> error 1>> output
Тем не менее, обратите внимание, что >>это для добавления, если файл уже содержит данные. Принимая во внимание, что >будет перезаписывать любые существующие данные в файле.
Итак, command 2> error 1> outputесли вы не хотите добавлять.
Просто для завершения, вы можете написать 1>так же, >как и дескриптор файла по умолчанию является выходным. так 1>и >есть одно и то же.
Итак, command 2> error 1> outputстановится,command 2> error > output
command &2>err.logя думаю, я полностью сбиваю с толку синтаксис. (Ссылка на соответствующий ответ на все вопросы о bash может быть в порядке)
command &2>err.logне совсем законно - амперсанд в этом синтаксисе используется для файлового дескриптора в качестве цели, например command 1>&2, перенаправляет stdout в stderr.
Попробуй это:
your_command 2>stderr.log 1>stdout.log
Цифры 0через 9являются файловыми дескрипторами в bash.
0обозначает стандартный ввод, 1обозначает стандартный вывод, 2обозначает стандартную ошибку. 3через 9запасные для любого другого временного использования.
Любой файловый дескриптор может быть перенаправлен в файл или в другой файловый дескриптор с помощью оператора >. Вместо этого вы можете использовать оператор >>для добавления в файл вместо создания пустого.
Использование:
file_descriptor > filename
file_descriptor > &file_descriptor
Пожалуйста, обратитесь к Расширенному руководству по Bash-Scripting: Глава 20. Перенаправление ввода / вывода .
Как это:
$ command >>output 2>>error
Или, если вы хотите смешать выходные данные (stdout & stderr) в одном файле, который вы можете использовать:
command > merged-output.txt 2>&1
Вывод нескольких команд может быть перенаправлен. Это работает для командной строки или наиболее полезно в bash-скрипте. -sНаправляет запрос на ввод пароля на экране.
Здесь блоки cmds stdout / stderr отправляются в отдельные файлы и ничего не отображать.
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Здесь блоки cmds stdout / stderr отправляются в один файл и отображаются.
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Здесь блоки cmds stdout / stderr отправляются в отдельные файлы и stdout для отображения.
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
В зависимости от того, кто вы (whoami) и имя пользователя, пароль может или не может потребоваться.
1>можно написать как>