`man -H`は常にブラウザに存在しないファイルを開きます。

`man -H`は常にブラウザに存在しないファイルを開きます。

コマンドを使用してブラウザでマンページを開こうとしましたが、コマンドを/usr/bin/man -H 3 free実行するたびにブラウザが存在しないファイルを開き、当然ページは表示されません。

私は何が間違っていましたか?

私のmanコマンドは以下から提供されます。man-db

答え1

少なくとも私のシステム(Arch Linux、man-db 2.9.4、Firefox 88.0)では、man一時ディレクトリを作成し、/tmp/生成されたHTMLファイルをその中に書き込み、HTMLファイルを引数として使用してブラウザを呼び出し、ブラウザのシャットダウン中に処理しています。一時ディレクトリを削除します(整理のため)。

これにより、一部のブラウザ(Lynxなど)では問題は発生しませんが、他のブラウザでは競合状態が発生する可能性があります(私の場合はFirefox; Chromiumも簡単にテストしましたが、同様の結果が出ました)。私が知っている限り、man新しいブラウザウィンドウを開くと、HTMLファイルが正しく開きます。一方、既存のブラウザウィンドウでマンページを新しいタブで開くと、それによって開始されたブラウザプロセスがman早く返され、他のブラウザプロセスがファイルを読み取ろうとするとファイルが消えてしまいます。

man一時HTMLファイルが削除されないように設計されたオプションは表示されません。ただし、-H/オプションの引数--html(または環境変数の値BROWSER)はシェルコマンドであり、クイック修正は次のとおりです。

BROWSER='firefox %s; sleep 5' man -H 3 free

sleepファイルが削除される前にFirefoxにページをロードする時間をお願いします。もちろん再ロードすることはできません。)

または、一時HTMLファイルを削除する独自のメカニズムを実装したい場合:

BROWSER='cp %s /path/to/file.html; firefox /path/to/file.html' man -H 3 free

(これは基本ファイルで作成された可能性がある他のリソースを無視する.htmlため、誤ってレンダリングされる可能性があります。)

または、一時ディレクトリを維持したい場合(たとえば、一時ディレクトリをあまり作成せず、一時ディレクトリが不安定で/tmpシステムが定期的に再起動されます):

BROWSER='firefox %s && false' man -H 3 free

(ブラウザコマンドがエラーを返した場合、一時ディレクトリは削除されません。man欠点としてはmanブラウザが開けないとみなされ、エラーメッセージが表示されます。)

また、環境変数を使用して一時データが生成される場所をTMP示すこともできます。man

最後に、選択した回避策を次のようにエイリアスまたは関数で便利にすることができます。

alias man='BROWSER="${BROWSER:-firefox} %s && false" man'

HTMLでマニュアルページを表示する他の方法も参照してください。

関連情報