至少在我的系统(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
环境变量的值)可以是 shell 命令,快速解决方法可能是:
BROWSER='firefox %s; sleep 5' man -H 3 free
Run Code Online (Sandbox Code Playgroud)
(sleep
在文件被删除之前给 Firefox 加载页面的时间;当然,重新加载它是不可能的)。
或者,如果您愿意实现自己的删除临时 HTML 文件的机制:
BROWSER='cp %s /path/to/file.html; firefox /path/to/file.html' man -H 3 free
Run Code Online (Sandbox Code Playgroud)
(这会忽略可能与主.html
文件一起生成的其他资产,因此可能会错误地呈现)。
或者,如果您可以保留临时目录(例如,您没有生成很多临时目录,您的目录/tmp
是不稳定的,并且您的系统已足够定期重新启动):
BROWSER='firefox %s && false' man -H 3 free
Run Code Online (Sandbox Code Playgroud)
(浏览器命令返回错误时不会删除临时目录man
;作为一个缺点,会打印错误消息,因为man
认为浏览器无法打开)。
另请注意,TMP
环境变量可用于告诉man
在哪里创建其临时数据。
最后,所选的解决方法可以方便地按照以下方式制作为别名或函数:
alias man='BROWSER="${BROWSER:-firefox} %s && false" man'
Run Code Online (Sandbox Code Playgroud)
另请参阅以 HTML 格式查看手册页的替代方法: