Упражнение 9.2
Как мы сформатировали эту главу?
Упражнение 9.3
Если вашим ограничителем для
eqn
является знак доллара, то как вы получите этот знак в выходном потоке? Подсказка: исследуйте кавычки и предопределенные слова
eqn
.
Упражнение 9.4
Почему команда
$ doctype <i>имена_файлов</i>
не выполняется? Модифицируйте
doctype
так, чтобы запускать команду, полученную в результате, вместо того, чтобы ее печатать.
Упражнение 9.5
Важны ли накладные расходы на добавочную команду
cat
в
doctype
? Перепишите
doctype
, чтобы избавиться от дополнительного процесса. Какая версия проще?
Упражнение 9.6
Что лучше: использовать
doctype
или писать файл
shell
, содержащий команды, для форматирования конкретного документа?
Упражнение 9.7
Поэкспериментируйте с различными комбинациями
grep
,
egrep
,
fgrep
,
sed
,
awk
и
sort
, чтобы повысить быстродействие doctype.
9.4 Справочник
Основной документацией для команды является обычно справочная страничка (называемая далее справочником) одностраничное описание в справочном руководстве по UNIX (см. рис. 9.2). Справочник хранится в стандартном каталоге, как правило, в
/usr/man
, в подкаталоге, нумерованном в соответствии с разделом руководства. Например, наш справочник для
hoc
хранится в
/usr/man/man1/hoc.1
.
Справочники печатаются с помощью команды
man(1)
, т.е. файла
shell
, который запускает
nroff -man
, поэтому
man hoc
печатает справочник
hoc
. Если одно и то же имя появляется в нескольких разделах, как само man (раздел 1 описывает команду, тогда как раздел 7 описывает макрокоманды), то раздел можно определить для
man
как
$ man 7 man
В результате печатается только описание макрокоманд пакета
man
. По умолчанию принято печатать все справочники с определенным именем, использующим
nroff
, но
man -t
порождает справочники для наборного устройства с помощью
troff
.
Автор справочника создает файл в соответствующем подкаталоге
/usr/man
. Чтобы печатать справочник, команда
man
вызывает
nroff
или
troff
с пакетом макроопределений; это можно увидеть, отыскав команду
man
для вызовов форматирующей программы. Мы получили бы такой результат:
$ grep roff `which man`
nroff $opt -man $all ;;
neqn $all | nroff $opt -man ;;
troff $opt -man $all ;;
troff -t $opt -man $all | tc ;;
eqn $all troff $opt -man ;;
eqn $all troff -t $opt -man | tc ;;
$
Разнообразие достигается применением флагов:
nroff
или
troff
, запускается или нет
eqn
и т.д. Справочник по макрокомандам, вызываемый
troff -man
, определяет команды
troff
, форматирующие в стиле данного руководства. В принципе они аналогичны макрокомандам
ms
, но есть и различия, особенно в установке названия и командах смены шрифта. Макрокоманды кратко документированы в
man(7)
, но основные из них легко запоминаются. Разметка справочника такова:
.TH COMMAND номер раздела
.SH NAME
команда \- краткое описание функций
.В команда возможные аргументы
.SH DESCRIPTION
Подробное объяснение команд и флагов.
Абзацы вводятся .PP.
.PP
Это новый абзац.
.SH FILES
Файлы, используемые командой, например, passwd(1)
упоминает /etc/passwd
.SH "SEE ALSO."
Ссылки к связанным документам, включая другие справочники
.SH DIAGNOSTICS
Описание некоторого необычного выходного потока
(например, см. cmp(1))
.SH BUGS
Неожиданные черты (не всегда ошибки; см. ниже)
Если какой-то раздел пуст, его заголовок опускается. Строка.
.TH
и разделы
NAME
,
SYNOPSIS
,
DESCRIPTION
не обязательны. Строка
.TH COMMAND номер раздела
называет команду и определяет номер раздела. Различные строки
.SH
идентифицируют разделы справочника. Разделы
NAME
и
SYNOPSIS
являются специальными; остальные содержат обычный текст. Раздел
NAME
называет
команду (на этот раз строчными буквами) и дает ее описание в одной строке, а раздел
SYNOPSIS
называет флаги, но не описывает их. Как и в любом разделе, входной текст имеет произвольную форму, поэтому смену шрифта можно определять с помощью макрокоманд
.B
,
.I
,
.R
. В разделе
SYNOPSIS
и имя, и флаги выделены жирным шрифтом; прочая информация печатается обычным шрифтом. Разделы
ed(1)
NAME
и
SYNOPSIS
, например, имеют вид и выводятся как