Поиск по сайту:
Повторение — мачеха учения и отец глубокого сна (Авессалом Подводный).

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

FavoriteLoadingДобавить в избранное
07.06.2020
Bash Heredoc

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

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

  • 0- stdin, стандартный входной поток.
  • 1- stdout, стандартный выходной поток.
  • 2- stderr, стандартный поток ошибок.

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

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

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

 

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

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

Потоки могут быть перенаправлены с помощью 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

 

Читать  Как повторить новую строку в Bash

Перенаправление 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 или &>.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

4 × 3 =

**ссылки nofollow

Это может быть вам интересно

Рекомендуемое
Слабые карты Слабая карта - это набор данных (объектов), на…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: