‘Grotty’ 手册页消息

‘Grotty’ 手册页消息

如果我尝试使用 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(图形化界面)显示该手册页。

当我遇到这些错误时,我发现 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。 首先删除了最后 1/2,错误消失了。然后只删除了最后 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

相关内容