
Если я попытаюсь выполнить поиск на определенных страницах руководства с помощью grep, я получу несколько «отвратительных» сообщений.
Например:
man mpv | grep dvdnav
результаты в:
mpv dvdnav://[longest|menu|title][/device] [options]
grotty:<standard input> (<standard input>):90690: character above first line discarded
grotty:<standard input> (<standard input>):90694: character above first line discarded
grotty:<standard input> (<standard input>):90698: character above first line discarded
grotty:<standard input> (<standard input>):90702: character above first line discarded
grotty:<standard input> (<standard input>):91895: character above first line discarded
grotty:<standard input> (<standard input>):91899: character above first line discarded
grotty:<standard input> (<standard input>):91903: character above first line discarded
grotty:<standard input> (<standard input>):91907: character above first line discarded
grotty:<standard input> (<standard input>):94450: character above first line discarded
grotty:<standard input> (<standard input>):94454: character above first line discarded
grotty:<standard input> (<standard input>):94458: character above first line discarded
│dvdnav:// │ dvdnav://menu │
Что является причиной появления этих сообщений и как их предотвратить?
решение1
У меня нет mpv
установленных, но это больше похоже на предупреждение grotty
(программы, которая обрабатывает исходные данные страниц руководства для вывода их на стандартный вывод), вероятно, исходящее из несовместимых страниц руководства. Вы пробовали
man mpv 2> /dev/null | grep dvdnav
? Это перенаправит ошибки и предупреждения из grotty
приемника, так что вы получите более чистый вывод.
Тем не менее, эта ошибка, скорее всего, является ошибкой в mpv
странице руководства (или в grotty
, кто знает).
решение2
Я почти уверен, что это вызвано ошибкой в форматировщике текста страницы руководства.
[Обновление: также см.этотответ со ссылкой наошибкаотчет.]
man grotty
говорит,
grotty преобразует вывод GNU troff в форму, пригодную для устройств, подобных пишущей машинке.
Чтобы отладить этоВо-первых, проверьте, можно ли отобразить эту страницу руководства с помощью groffer
(графического roffer).
Когда я столкнулся с этими ошибками, я обнаружил, что groffer работал нормально, без ошибок, а вот grotty выдавал ошибку «символ выше первой строки отброшен».
Поэтому я копнул немного глубже. Страница, которая вызывала у меня проблемы, была zoneminder.1.
Сначала я его распаковал:
gunzip -k zoneminder.1.gz
Затем, используя это, я могу запустить тест:
man -l man.1 | grep jksffjsd #-l means man the local file, i.e. produce error messages
Теперь отредактируйте zoneminder.1 с помощью принципа «разделяй и властвуй». Сначала удалил последнюю половину, и ошибка исчезла. Затем удалил только последние 3/4, и ошибка осталась. Затем удалил последние 5/8, и ошибка осталась. Затем взглянул на него и начал просто удалять по несколько строк за раз, пока ошибка не переключилась из состояния «вкл.» в состояние «выкл.».
Я оказался в таблице и смог удалить из нее только несколько целых записей (см. изображение ниже).
Я обнаружил, что эта таблица была причиной неполадок,но только когда он переливался на следующую страницу, как показано здесь:
Удалите еще одну запись из таблицы, и ошибки исчезнут.
Поэтому справедливо будет просто проигнорировать это.
Посмотрю, смогу ли я сообщить об этом как об ошибке в Grotty.
решение3
Этому уже больше 5 лет; я знаю. Но если кто-то еще сталкивается с той же проблемой, я только что ответил на такой вопрос; довольно просто: Как использовать grep для поиска опций на странице руководства?
$ man ls | grep -- '--a'
-a, --all
-A, --almost-all
--author
И сузить результаты до строк, начинающихся с дефиса:
grep '^[[:space:]]*-' –
Тестовый забег:
$ man shutdown | grep -- '-' | grep '^[[:space:]]*-'
--help
-H, --halt
-P, --poweroff
-r, --reboot
-h
-k