Как перенаправить stderr в stdout в файле с помощью Bash в Linux

12 set 2022 2 min di lettura
Как перенаправить stderr в stdout в файле с помощью Bash в Linux
Indice dei contenuti

Введение

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

В 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 или &>.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.