Command-Line
為什麼 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”而不是一個組成,但我不確定。
這是 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 中。