ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Как перенаправить 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