Приемы профессиональной работы в UNIX


ПОЯСНЕНИЯ - часть 2


Стандартный вывод по конвейеру передается команде sort, располагающей имена файлов по порядку. Это сильно помогает при сортировке горы выводной информации. Чтение кипы распечаток толщиной в один фут может свести с ума кого угодно.

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

Для каждого подходящего файла выполняется проверка в строках 31-36. Проверка начинается с запуска команды file. Выход file по конвейеру передается команде egrep, которая ищет тип файла, соответствующий набору нескольких выражений. Если какое-либо выражение подходит, то нам не нужно обрабатывать этот файл. Это не текстовый файл, и его нельзя вывести на принтер. Во многих случаях файлы данных содержат большое количество символов прогона формата, которые выталкивают страницу после каждой пары символов. Если вы не будете находиться рядом с принтером, когда печатаются такие файлы, то вы можете получить листинг, занимающий половину ящика бумаги, затратив целый лес на ненужную работу.

Нам не нужен выход команды egrep, а только ее статус возврата.

Если egrep обнаруживает одно из указанных ей выражений, она завершается со статусом успеха, или 0. Тем самым проверка if включает выполнение оператора then, который в данном случае выводит нас из конструкции if-then-else и продолжает цикл while, пропуская таким образом файл.

Если же egrep не обнаружила ни одну из указанных символьных строк, то выполнение продолжается с оператора else, который выполняет еще одну команду file и переадресовывает ее вывод на устройство с именем /dev/tty. Это универсальное имя устройства, которое гарантирует вам вывод на экран вашего терминала. UNIX обеспечивает, что указание /dev/tty обходит любые команды переадресации вывода, действующие в данный момент. Поскольку стандартный вывод уже переадресован для всего цикла while, то нам нужно попасть на устройство /dev/tty, чтобы вывод шел на экран терминала, а не в файл печати. Отображение на терминал имени обрабатываемого файла позволяет пользователю знать, какой файл будет добавлен к распечатке.




Начало  Назад  Вперед



Книжный магазин