Злой человек вредит самому себе прежде, чем повредит другому (Августин).

2 мин для чтенияКак перенаправить stderr на стандартный вывод в Bash

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
7 июня 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

 

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

 

Читать  Команда Kill в Linux

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

command &> file

 

Вывод

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

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

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

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

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

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

Читайте также

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

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

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close