Как перенаправить stderr в stdout в Bash

Bash: перенаправить stderr в stdout

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

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

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

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

Входной поток предоставляет программе информацию, обычно посредством ввода с клавиатуры.

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

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

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

Потоки можно перенаправлять с помощью оператора n> , где n — номер файлового дескриптора.

Если n опущено, по умолчанию используется 1 — стандартный поток вывода. Например, следующие две команды одинаковы: обе перенаправляют вывод команды ( 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 или &> .

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

терминал bash

Связанные руководства

Источник

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

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