コマンドを使用してブラウザでマンページを開こうとしましたが、コマンドを/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でマニュアルページを表示する他の方法も参照してください。