「Grotty」のマニュアルページのメッセージ

「Grotty」のマニュアルページのメッセージ

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まず、このマニュアルページを(グラフィカル roffer) でも表示できるかどうかを確認します。

これらのエラーに遭遇したとき、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 を分割統治法で編集します。 まず、最後の半分を削除したらエラーはなくなりました。次に、最後の 3/4 だけを削除しましたが、エラーはまだありました。次に、最後の 5/8 を削除しましたが、エラーはまだありました。その後、エラーを確認し、エラーがオンからオフに切り替わるまで、一度に数行ずつ削除し始めました。

私はテーブルの中にいることに気付きましたが、テーブルからいくつかのエントリ全体しか削除できませんでした (下の画像を参照)。

私が発見したのは、このテーブルが問題を起こしていたということでした。ただし、次のページにオーバーフローした場合のみ次のように表示されます。

ここに画像の説明を入力してください

テーブルからエントリをもう 1 つ削除すると、エラーはなくなります。


したがって、これを無視するのは妥当です。

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

関連情報