Чтобы перенаправить stdout в усеченный файл в Bash, я знаю, что нужно использовать:
cmd > file.txt
Чтобы перенаправить stdout в Bash, добавив к файлу, я знаю, что нужно использовать:
cmd >> file.txt
Чтобы перенаправить оба stdout и stderr в усеченный файл, я знаю, что нужно использовать:
cmd &> file.txt
Как перенаправить оба файла stdout и stderr в файл? cmd &>> file.txt
не работал у меня.
cmd >>file.txt 2>&1
Bash выполняет перенаправления слева направо следующим образом:
>>file.txt
: Откройте file.txt
в режиме добавления и переадресуйте stdout
там.2>&1
: Перенаправить stderr
в "где stdout
в настоящее время идет". В этом случае это файл, открытый в режиме добавления. Другими словами, &1
повторно использует дескриптор файла, который в настоящее время использует stdout
.Есть два способа сделать это, в зависимости от вашей версии Bash.
Классический и портативный (Bash pre-4) способ:
cmd >> outfile 2>&1
Непортируемый путь, начиная с Bash 4,
cmd &>> outfile
(аналог &> outfile
)
Для хорошего стиля кодирования вы должны
Если ваш script уже начинается с #!/bin/sh
(независимо от того, предназначено или нет), то решение Bash 4 и вообще любой Bash -специфический код не подходит.
Также помните, что Bash 4 &>>
- это просто более короткий синтаксис - он не вводит никаких новых функций или чего-либо подобного.
Синтаксис (помимо другого синтаксиса перенаправления), описанный здесь: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
В Bash вы также можете явно указать свои переадресации на разные файлы:
cmd >log.out 2>log_error.out
Добавление будет:
cmd >>log.out 2>>log_error.out
cmd >log.out 2>&1
. Я редактирую свой ответ, чтобы удалить первый пример.
В Bash 4 (а также ZSH 4.3.11):
cmd &>>outfile
просто из коробки
Это должно работать нормально:
your_command 2>&1 | tee -a file.txt
Он сохранит все журналы в файле file.txt, а также сбросит их на терминал.
Попробуй это
You_command 1>output.log 2>&1
Ваше использование файла &> x.file работает в bash4. простите за это: (
0, 1, 2... 9 - файловые дескрипторы в bash.
0 означает stdin
, 1 означает stdout
, 2 - stderror
. 3 ~ 9 является запасным для любого другого временного использования.
Любой файловый дескриптор можно перенаправить в другой файловый дескриптор или файл с помощью оператора >
или >>
(добавить).
Использование: < file_descriptor >> < filename | & file_descriptor >
Пожалуйста, обратитесь к http://www.tldp.org/LDP/abs/html/io-redirection.html.
You_command
в stdout, а stdout из You_command
в файл output.log
. Кроме того, он не будет добавлен в файл, но перезапишет его.