ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как перенаправить stderr на стандартный вывод в Bash

Bash Heredoc

При перенаправлении вывода команды в файл или передачи его в другую команду вы можете заметить, что сообщения об ошибках выводятся на экран.

В Bash и других оболочках Linux, когда программа выполняется, она использует три стандартных потока ввода-вывода. Каждый поток представлен числовым дескриптором файла:

Файловый дескриптор – это просто число, представляющее открытый файл.

Поток ввода предоставляет информацию программе, как правило, набирая на клавиатуре.

Вывод программы поступает в стандартный поток ввода, а сообщения об ошибках – в стандартный поток ошибок. По умолчанию потоки ввода и ошибки выводятся на экран.

 

Перенаправление вывода

Перенаправление – это способ захвата вывода из программы и отправки его в качестве ввода в другую программу или файл.

Потоки могут быть перенаправлены с помощью n>оператора, где nуказан номер дескриптора файла.

Если n опущено, по умолчанию 1 используется как стандартный поток вывода. Например, следующие две команды одинаковы; оба перенаправят команду output ( stdout) в файл.

command > file
command 1> file

 

Для перенаправления стандартной ошибки ( stderr) используйте оператор 2>:

command 2> file

 

Вы можете записать оба stderr и stdout два отдельных файла:

command 2> error.txt 1> output.txt

 

Чтобы запретить отображение сообщений об ошибках на экране, перенаправьте stderr на /dev/null:

command 2> /dev/null

 

Перенаправление stderr на stdout

При сохранении вывода программы в файл весьма распространено перенаправление stderr, чтобы stdoutвы могли иметь все в одном файле.

Для того, чтобы перенаправить stderr на stdout и есть сообщения об ошибках, отправленных в тот же файл, как стандартный вывод, используйте следующее:

command > file 2>&1

 

> fileпере направить stdout к file, и 2>&1 перенаправить stderr к текущему местоположению stdout.

Порядок перенаправления важен. Например, следующий пример перенаправляет только stdoutна file. Это происходит потому, что объект stderr перенаправлен к stdout до того, как stdout был перенаправлен на file.

command 2>&1 > file

 

Другой способ перенаправления stderr на stdout, это использовать конструкцию &>. В Bash &> имеет то же значение, что и 2>&1:

command &> file

 

Вывод

Понимание концепции перенаправлений и файловых дескрипторов очень важно при работе в командной строке.

Для перенаправления stderr и stdout используйте конструкции 2>&1 или &>.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Exit mobile version