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

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 не существует.