5.7.3. Переадресация стандартного потока ошибок

We use cookies. Read the Privacy and Cookie Policy

5.7.3. Переадресация стандартного потока ошибок

При переадресации стандартного потока ошибок указывается дескриптор 2. Рассмотрим пример. Утилита grep ищет в файле missiles строку "trident":

$ grep "trident" missiles

grep: missiles: No such file or directory

Однако в текущем каталоге нет такого файла, и соответствующее сообщение об ошибке по умолчанию выводится на экран. Можно переслать все сообщения об ошибках в системную корзину (устройство /dev/null):

$ grep "trident" missiles 2> /dev/null

Теперь никакие сообщения на экране отображаться не будут.

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

$ grep "trident" missiles 2> grep.err

$ cat grep.err

grep: missiles: No such file or directory

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

$ grep "LPSO" * 2>> account.err

$ grep "SILO" * 2>> account.err

5.7.4. Переадресация обоих выходных потоков

В одной командной строке можно последовательно переадресовывать как стандартный поток вывода, так и стандартный поток ошибок. Ниже приведен пример, в котором команда cat обрабатывает два файла, направляя вывод в файл accounts.out, а сообщения об ошибках — в файл accounts.err.

$ cat account_qtr.doc account_end.doc 1> accounts.out 2> accounts.err

$ cat accounts.out

AVBD 34HJ OUT AVFJ 31KO OUT

$ cat accounts.err

cat: account_end.doc: No such file or directory

Просмотрев файл accounts.err, обнаруживаем, что исходного файла account_end.doc не существует.