例如,如果我输入以下命令:
$ 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 中发布。