"Рас Сэйдж. Приемы профессиональной работы в UNIX" - читать интересную книгу автора

все инструментальные средства системы UNIX должны быть спроектированы
так, чтобы они могли быть связаны с другими командами и процессами, в
которые они могут быть встроены. Возможно, что другой команде необхо-
димо будет вызвать команду tree и проверить, корректно ли она отрабо-
тала. Хорошим стилем проектирования программных средств является прог-
нозирование и разрешение многих способов использования программы.
Строки 9-15 проверяют, чтобы любые параметры, передаваемые ко-
мандной строке, были действительно каталогами, как указано в нашем
синтаксисе. Напомним, что в командной строке может быть помещен только
один каталог. Если мы используем только один параметр и этот параметр
не является каталогом, то мы печатаем сообщение об ошибке и выходим.
Таким образом, операторы проверки гарантируют, что либо не использу-
ется ни один параметр, либо единственный используемый параметр явля-
ется корректным каталогом.
Мы подошли к сердцу команды tree - это строки 17-20. Главным
здесь является команда find системы UNIX. Каталог, в котором ведется
поиск, определяется при запуске команды. Синтаксис ${1:-.} является
формой параметрической подстановки и означает следующее: если $1 (что
является первым позиционным параметром) установлен (иными словами,
если аргумент был передан командной строке и был ненулевым), то нужно
использовать это значение. В противном случае следует использовать ка-
талог . (текущий каталог). Этот тип подстановки дает нам возможность
запускать команду tree без указания имени каталога (когда после tree
на командной строке ничего не следует),- то есть работать в режиме "по
умолчанию", что часто используется в различных файловых инструментах.
Команда find выводит на печать полное имя каждого файла, который
ей встречается. Поскольку не используется никакая специальная опция
для селекции файлов, печатаются все имена. После этого все полные име-
на файлов сортируются для более удобного чтения. Такая сортировка
несколько увеличивает время работы команды, однако наглядность резуль-
тата говорит о том, что это время было потрачено с пользой.
Далее, отсортированные полные имена файлов передаются по прог-
раммному каналу команде sed системы Unix. Sed - это "потоковый редак-
тор", очень гибкое средство, которое может быть использовано для иден-
тификации и обработки различных образцов текста. Опции -e являются
операциями редактирования, применяемыми к поступающим данным. Первый
оператор просто сообщает команде sed, что нужно напечатать первую
строку, затем удалить строку 1. Это делается для того, чтобы напеча-
тать название корневого каталога, который исследуется. Этой строке не
требуется никакой дальнейшей модификации, так как корневой каталог не
имеет никаких дополнительных элементов путей доступа, которые нужно
было бы трансформировать в символы косой черты для показа отступов.
Удаление первой строки связано с тем, что она не нужна в дальнейшей
работе.
Вторая операция редактирования является командой подстановки. Она
заменяет каждый символ, отличный от символа косой черты (вплоть до
первого символа /) на последовательность пробелов и затем один символ
(/). Это избавляет нас от печатания имен промежуточных каталогов впе-
реди полного имени файла. Буква g в конце этой строки означает, что
эта операция выполняется глобально, то есть для всех считываемых сим-