
如果我嘗試使用 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