Стандартная ошибка (также известная как stderr) является устройством вывода ошибок по умолчанию. Используйте stderr для записи всех сообщений об ошибках системы. Число (FD - File Descriptors) два (2) обозначает stderr. По умолчанию stderr - это экран или монитор. Стандартный вывод (также известный как stdout) используется командой для записи (отображения) ее вывода. По умолчанию stdout - это экран. Он обозначается одним числом (1).
Как перенаправить стандартную ошибку (stderr)
2> - это символ перенаправления ввода, синтаксис которого следующий:
Перенаправить stderr (стандартную ошибку) в файл:
1 | command 2> errors.txt |
Давайте перенаправим и stderr, и stdout (стандартный вывод):
1 | command &> output.txt |
Наконец, мы можем перенаправить stdout в файл с именем myoutput.txt, а затем перенаправить stderr в stdout с помощью 2>&1 (errors.txt):
1 | command > out 2>errors.txt |
Убедитесь, что вы используете >> для добавления данных/лога, если в файле уже есть данные. Например:
перезаписать существующий файл
1 | command1 &> output.txt |
добавить существующий файл
1 | command2 &>> output.txt |
добавить stdout и stderr в разные файлы
1 | my_command 2>err.log 1>out.log |
Вы должны заменить команду command на команду, которую вы хотите запустить. Рассмотрим несколько примеров, объясняющих перенаправление стандартной ошибки в bash.
Как перенаправить стандартную ошибку в bash
Выполните команду find и сохраните все сообщения об ошибках в файл find.error.txt:
1 | find / -name "*.conf" 2> find.error.txt |
Вы можете просмотреть файл find.error.txt с помощью команды cat:
1 | cat find.error.txt |
Вам нужно использовать "2>", когда вы хотите перенаправить stderr в файл. Вы можете перенаправить stdout в файл с именем results.txt и stderr в файл с именем errors.txt:
1 | find / -name "*.conf" >results.txt 2>error.txt |
Проверьте результаты с помощью команды cat:
1 2 | cat results.txt cat error.txt |
Это полезно в сценариях или для любых других целей.
Как перенаправить стандартную ошибку и стандартный вывод в bash
Вы можете отправить как stdout, так и stderr в файл с именем output.txt
1 | команда &>output.xt |
К примеру
1 | find / -name "*.pl" &>filelist.txt |
Обратите внимание, что и ошибки, и фактический вывод команды find сохраняются в файл:
1 | cat filelist.txt |