Во-первых, следует отметить, что существует более одной программы под названием man2html
.
Одна утилита под названием man2html
- это программа на языке Си, изначально написанная в конце 1990-х годов Ричардом Верхувеном в Эйндховенском технологическом университете. Программа имеет существенно причудливую внутреннюю структуру. Однако ее преимущество в том, что она работает с исходным текстом страницы man, а не с troff
или nroff
. Эта программа была добавлена в пакет man Фредерико Лучифреди.
Программа понимает семантику макросов man
и mandoc
и выводит разумную структуру HTML. Например, когда вы используете абзацы с отступами, как здесь:
.IP word Definition of word. .RS
программа выдаст список определений HTML.
Я поддерживаю одну очень большую man-страницу (более мегабайта исходного текста и почти 400 страниц, преобразованных в PDF размером с букву groff
):
$ ls -l txr.1 -rw-rw-r-- 1 kaz kaz 980549 Jan 3 11:38 txr.1
Когда мне понадобилось преобразовать ее в HTML, около пяти лет назад, единственное, что я нашел, что делало разумную работу, была man2html
программа на Си, плюс постобработка ее вывода, чтобы "приправить по вкусу".
В конце концов, мне захотелось получить HTML-документ гораздо лучшего качества, поэтому я начал писать troff
макросы. Ограничения программы на C стали болезненно очевидными, поэтому я сделал форк. На моем сайте git вы можете найти git-репо с 30 исправлениями к man2html. Эти исправления исправляют ряд ошибок и улучшают программу, позволяя интерпретировать макросы troff, условия, циклы и другие конструкции. Я также добавил регистр M2
, с помощью которого можно написать код, определяющий, что он запущен под man2html
и может условно делать некоторые вещи по-другому (прокрутите вниз для примера). Кроме того, я добавил команду .M2SS
, которая позволяет создавать пользовательский раздел заголовка HTML.
Моя большая manpage размещена здесь. Она создана с помощью man2html
и обработана моей программой genman.txr
, которая переставляет разделы и добавляет гиперссылки по всему документу. Она также переписывает внутренние ссылки в оглавлении на стабильные URL (основанные на хэшировании, а не на произвольном перечислении) и делает оглавление сворачиваемым с помощью Javascript.
Точные команды, используемые моим Makefile
:
man2html txr.1 | ./txr genman.txr - > txr-manpage.html tbl txr.1 | pdfroff -man --no-toc - > txr-manpage.pdf
Для примера того, как условно отличается вывод HTML и nroff
, мы можем посмотреть на раздел вывода man
:
9.19.4 Macro defstruct Syntax: (defstruct {| ( *)} *) The defstruct macro defines a new structure type and registers it under , which must be a bindable symbol, according to the bindable function. Likewise, the name of every must also be a bindable symbol.
Выше, обратите внимание, как параметры обозначаются в
. В HTML-версии они обозначены курсивом.
Раздел синтаксиса появляется в исходном коде следующим образом:
.coNP Macro @ defstruct .synb .mets (defstruct >> { name | >> ( name << arg *)} < super .mets \ \ << slot-specifier *) .syne
это все пользовательские макросы, определенные в одном документе. В разделе .mets
, означает, что
b
является метасинтаксической переменной. >> a b
означает, что a
- это конкретный синтаксис, рядом с которым находится метасинтаксический b
без промежуточного пространства, а a b c
означает, что b
- это метасинтаксис, сжатый между литералами a
и c
.
Моя улучшенная версия man2html
понимает довольно сложный макрос, реализующий эти соглашения о разметке.
Также обратите внимание, как в руководстве автоматически нумеруются разделы: это все сделано кодом troff, который man2html
понимает.
Вероятно, данные еще не были записаны на диск, но все еще находятся в кэше страниц ("грязные страницы" ). Свяжитесь с
grep Dirty /proc/meminfo
Вы можете попробовать запустить sync
перед df
/ du
. Это должно заставить любые данные в кэше страниц записываться на диск.