Я це дуже знаю:
$ 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
, я думаю, що я абсолютно заплутаний синтаксисом. (Посилання на відповідну відповідь на всі баш-труби може бути в порядку)
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: Розділ 20. Перенаправлення вводу / виводу .
Щось схоже на те:
$ command >>output 2>>error
Або якщо ви хочете змішати результати (stdout & stderr) в одному файлі, який ви можете використовувати:
command > merged-output.txt 2>&1
Вихід декількох команд може бути перенаправлений. Це працює як в командному рядку, так і найбільш корисно в скрипті bash. -s
Направляє запит на введення пароля на екрані.
Hereblock cmds stdout / stderr надсилаються окремим файлам і нічого не відображаються.
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Hereblock cmds stdout / stderr надсилаються в один файл і відображаються.
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Hereblock cmds stdout / stderr надсилаються до окремих файлів, а stdout - для відображення.
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
Залежно від того, хто ви (whoami) та ім'я користувача, пароль може бути, а може і не потрібно.
1>
можна записати як>