为什么 apropos 和 man -k 会省略或错过有效结果?

为什么 apropos 和 man -k 会省略或错过有效结果?

例如,如果我输入以下命令:

$ man -k compare

diff结果中缺少该命令,但test实际上并没有。我apropos按照预期使用得到了相同的结果。

$ whereis diff
diff: /usr/bin/diff /usr/share/man/man1/diff.1.gz
$ whereis test
test: /usr/bin/test /usr/share/man/man1/test.1.gz

如果我检查 的简短描述diff,结果如下:

NAME
       GNU diff - compare files line by line

正如您可以清楚地看到的,“比较”位于简短的描述中。此外,让我们也检查一下长描述:

DESCRIPTION
       Compare FILES line by line.

描述中再次出现“比较”。

现在,让我们看一下以下的简短描述test

NAME
       test - check file types and compare values

这正是我所期望的。然而,测试的描述中缺少“比较”。

所以,我不清楚为什么man -k compare或者apropos compare没有找到diff。不过我相信这与命令的输出有关whatis

$ whatis diff
diff (1)             - (unknown subject)
$ whatis test
test (1)             - check file types and compare values

现在造成这种差异的原因可能是由于手册页的diff名称由两个单词“GNU diff”组成,而不是一个,但我不确定。

答案1

这是 GNU diffutils 包的手册页中的一个错误。正如您所怀疑的,问题在于它们显示“GNU diff”(等)而不仅仅是“diff”作为程序名称。这会导致 man 程序无法识别简短描述。

python3
>>> import dbm
>>> db = dbm.open('/var/cache/man/index.db')
>>> db['diff\0']
b'-\t1\t1\t1554725040\t0\tA\t-\t-\tgz\t\x00'
>>> db['cat\0']
b'-\t1\t1\t1567679920\t0\tA\t-\t-\tgz\tconcatenate files and print on the standard output\x00'

该错误是在 diffutils 3.3 之后、diffutils 3.6 之前引入的。据报道称错误#39760并固定在这次提交或者实际上可能这次提交。这些修复尚未发布,将在 diffutils 3.8 中发布。

相关内容