| минала (termcap) и вывод
| . ее командой more
.
.
--More--(5%) <-строка состояния more
v vi /etc/termcap
vi +210 /etc/termcap <-командная строка для редак-
тора vi получена от more
.
.
:q <-выход из vi
--More--(5%) <-возврат в more
:!sh порождение нового shell'а
$ date запуск команды date
Wed Apr 23 07:15:04 PST 1986
$ ^d <-убрать порожденный shell
--More--(5%) <-возврат в more
:f распечатка имени файла,
выводимого командой more
"/etc/termcap" line 54 выход команды f
--More--(5%)
f <-команда more для пропуска
полного экрана
.skipping 23 lines
.
.
--More--(9%) <-пропуск и выдача текста
q выход из команды more
ПРИМЕРЫ
1. $ ll -R / | m
Начиная с корневого каталога (/), вывести в длинном формате (ll)
все файлы (опция -a подразумевается в ll) всей системы (-R) и постра-
нично распечатать на экран (| m).
2. $ m `path inittab rc passwd`
Обнаружить и вывести с помощью more системные файлы inittab, rc и
passwd. Неприятность здесь заключается в том, что данный маршрут ско-
рее всего относится к каталогу /bin/passwd, а не /etc/passwd (посколь-
ку каталог /etc размещается в конце каталогов), а это означает, что вы
можете попытаться вывести на экран исполняемый файл. В зависимости от
того, какую из версий команды more вы запустили, это может привести к
чему угодно начиная с сообщения команды more о том, что это был не
текстовый файл, и заканчивая тем, что ваш терминал начнет показывать
непонятные символы и даже зависнет.
ПОЯСНЕНИЯ
Поскольку в этом командном файле не так много текста, то все до-
вольно понятно, нет ни обработки ошибок, ни других дополнений. Просто
нехитрый вызов команды more. Полное имя здесь указано с целью повыше-
ния быстродействия, как мы обсуждали ранее. Вы должны перепроверить
местонахождение вашей команды more. В системе Berkeley она может нахо-
диться в каталоге /usr/ ucb/more. Воспользуйтесь командой path more
для определения этого места и вставьте соответствующий маршрут вместо
указанного нами.
Кстати, фокус попадания этой символьной строки в текст вашего ко-
мандного файла состоит в том, чтобы войти в редактор и вызвать следую-
щую команду:
:.!path more
Здесь происходит переход в shell и запуск команды path (:!), за-
тем выход команды path (который представляет собой полное маршрутное
имя) помещается в буфер редактора в самом начале текущей строки (.).
После этого вы имеете эти данные в вашем редактируемом файле и при не-
обходимости можете отредактировать их.
2.2.5. mmm - обработка программой nroff макрокоманд для рукописей
---------------------------------------------------------------------------
ИМЯ: mmm
---------------------------------------------------------------------------
mmm Командная строка nroff для макросов обработки
рукописей
НАЗНАЧЕНИЕ
Вызывает текстовый процессор nroff со специальными опциями, кото-
рые инициализируют макросы обработки рукописей.
ФОРМАТ ВЫЗОВА
mmm file [...]
ПРИМЕР ВЫЗОВА
mmm memo Обработать с помощью nroff файл моих заметок
memo и отобразить его на экран
ТЕКСТ ПРОГРАММЫ
1 :
2 # @(#) mmm v1.0 Nroff command line with mm macros Author: Russ Sage
2а Командная строка nroff с макросами mm
4 if [ "$#" -eq 0 ]
5 then echo "mmm: wrong arg count" >&2
6 echo "usage: mmm file [...]" >&2
7 exit 1
8 fi
10 LIST=""
11 for ARG in $*
12 do
13 if [ ! -f $ARG ]
14 then echo "mmm: $ARG is not a regular file" >&2
15 else LIST="$LIST $ARG"
16 fi
17 done
19 nroff -r0O -mm $LIST
ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ
ARG Содержит каждый позиционный параметр командной
строки
LIST Содержит список проверяемых имен файлов
ОПИСАНИЕ
ЗАЧЕМ НУЖЕН КОМАНДНЫЙ ФАЙЛ mmm?
Одним из фактов делового мира является работа с бумагами. Мы про-
изводим заметки, письма, контракты, документы, руководства и так да-
лее. Если вы знакомы со стилем производства документации в системе
UNIX, то ваши текстовые файлы в основном представлены в одном из фор-
матов программы nroff.
Однако различные программы форматирования текстов служат различ-
ным целям. Имеется стандартный nroff и nroffс дополнениями, такими
как макросы ms и mm. Для подготовки графической информации и выполне-
ния типографских работ разработана программа troff. Система AT&T имеет
целую программную среду под названием Writers Workbench, и система
Berkeley имеет аналогичные возможности.
Большинство наших задач по написанию каких-либо текстов может
быть сведено к нескольким стандартным форматам, таким как письма, ру-
кописи вообще, страницы руководств и так далее. Не так легко запомнить
опции команды nroff (или другой команды), которые следует использовать
в данном случае, да мы и не должны делать это. Наша команда mmm служит
иллюстрацией программы, которую мы можем запускать всякий раз, когда
нам нужен определенный формат. Вы можете создать несколько версий
программы, которые удовлетворяют вашим собственным нуждам при написа-
нии текстов.
Использование заготовленных заранее команд означает, что мы можем
делать полезную работу, даже если некоторое время мы не выполняли ра-
боту определенного вида. Мы также можем избежать многократных нажатий
на клавиши. Мастера UNIX'а периодически уединяются в своих горных убе-
жищах, где штудируют справочные руководства в поисках полезных, но
доселе незамеченных опций, которые могут быть встроены в программные
средства для повседневной работы. Если слишком некритично полагаться
на ваш текущий набор инструментальных средств, то можно пропустить по-
лезные возможности.
ЧТО ДЕЛАЕТ mmm?
Командный файл mmm - это интерфейсный процессор для команды
nroff. Под словом "интерфейсный" мы подразумеваем, что он обрабатывает
вызывающую командную строку и устанавливает все опции для вызова прог-
раммы nroff. Некоторые из опций nroff жестко запрограммированы в вызо-
ве. Эти опции инициализируют отдельные части программы nroff.
Если вы не включаете никакие аргументы, mmm распознает это как
ошибку и выводит синтаксическую подсказку. Обратите внимание, что если
вы передадите mmm такой аргумент, как -z, то этот аргумент будет
рассматриваться как имя файла, а не как подлежащая передаче опция, и
это снова вызовет ошибку. Вторая ошибка не является фатальной, в то
время как первая фатальна.
После обработки всех аргументов программа nroff использует имена
файлов в качестве файлов с входными данными. По умолчанию вывод произ-
водится в stdout (стандартный вывод). Обычно это экран вашего термина-
ла, но вывод может быть переадресован или передан по конвейеру на уст-
ройство печати или куда-либо еще.
ПРИМЕРЫ
1. $ mmm nroffile | m
Запуск команды nroff применительно к файлу nroffile, вывод ре-
зультата на экран с передачей по конвейеру команде more. Это полезно
при изучении утилиты nroff, проведении экспериментов с различными ко-
мандами и наблюдения за соответствующими результатами.
2. $ for F in proj.?
do
mmm $F > $F.rf
done
Обработка в цикле всех файлов, имена которых содержат символьную
строку "proj.", за которой следует один символ. Это могут быть proj.1,
proj.2 и так далее по всему набору символов вплоть до proj.z, proj.{,
proj.|, proj.} и proj.~, если считать, что у вас есть файлы, имена ко-
торых содержат эти символы. Каждый файл обрабатывается, и выход nroff
перенаправляется в файл с таким же именем, дополненным символами .rf.
3. $ mmm status[12] | lpr -o5
Обработка командой nroff файлов status1 и status2. Выход в стан-
дартный вывод передается по конвейеру программе lpr. Программа lpr яв-
ляется фильтром и принимает или имена файлов в командной строке, или
непосредственно данные, передаваемые ей по конвейеру (но не то и дру-
гое сразу). Опция -o5 указывает lpr сместить страницу на 5 символов.
ПОЯСНЕНИЯ
В строке 4 проверяется, равно ли нулю количество аргументов в ко-
мандной строке. Если да, в стандартный файл ошибок выдается сообщение
об ошибке. Выводится также синтаксическая подсказка, и mmm завершается
с плохим статусом.
Переменная LIST инициализируется нулевым значением в строке 10.
Обычно переменные интерпретатора shell и так в начале равны нулю, но
предварительная установка значения является хорошим стилем программи-
рования.
Затем мы обрабатываем каждый аргумент командной строки в цикле
(строки 11-17). Все аргументы должны быть именами файлов, поэтому каж-
дый из них проверяется на то, существует ли он как обычный файл. Если
это не файл, то в стандартный файл ошибок выводится сообщение об ошиб-
ке. Тем не менее программа не завершается. Не следует аварийно прекра-
щать всю программу только потому, что нет указанного файла. Мы про-
пускаем его и идем до конца списка аргументов. Это особенно актуально,
если данная команда используется как фоновая во время выполнения дру-
гой работы. Пользователь скорее согласится с тем, чтобы было выполнено
побольше работы, чем не сделано вообще ничего. Это решение, принятое в
данной программе, и вы можете изменить его, если оно не подходит в ва-
шей ситуации.
Если имени соответствует допустимый файл, оно добавляется в
список хороших имен файлов. Этот список становится главным списком для
команды nroff.
После того как все аргументы проверены, мы в строке 9 строим и
выполняем командную строку nroff.
Опция -rO0 для nroff указывает макросам обработки рукописей (па-
кету mm) установить регистр, который имеет дело с отступом текста, в
состояние, соответствующее отступу в 0 символов. Это значит, что весь
текст начинается с крайней левой позиции, т.е. выровнен слева. Путем
проведения экспериментов я обнаружил, что левое выравнивание текста
программой nroff и установка отступа для принтера дает наиболее надеж-
ный вывод на печать. В противном случае, если вы установите отступ
текста в nroff и отступ в принтере, то может произойти настоящее столк-
новение, когда дело коснется вывода колонок в странице. Вы можете из-
менить это место, если ваши программы вывода или устройства печати ве-
дут себя как-то иначе. Опция -mm указывает программе nroff просмотреть
библиотеку макросов обработки рукописей, чтобы определить, использу-
ются ли какие-либо из них во входном документе. Эти макросы очень
большие и требуют много времени центрального процессора. Если вам не-
обходимо использовать их, то вам потребуется большой компьютер или
компьютер, специально предназначенный для этой цели, чтобы добиться
хорошего времени получения результата.
Последним аргументом является $LIST. В этой переменной находится
строка имен файлов, разделенных пробелами. Эти имена помещаются в ко-
мандную строку nroff. Можете быть уверенными, что в этом месте нет ни-
каких ошибок.
ВОЗМОЖНЫЕ МОДИФИКАЦИИ
Поскольку все аргументы рассматриваются как имена файлов, то у
нас нет способа передачи дополнительных команд пакету mm. Наличие та-