如果我尝试使用 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