我$PATH通过导出添加了额外的目录PATH=/my/dirs:$PATH
但我不确定是否应该对MANPATH. 因为默认MANPATH为空但man命令有效。我找到了一个名为的命令manpath,它的手册说If $MANPATH is set, manpath will simply display its contents and issue a warning.。这是否意味着设置 MANPATH 不是为man命令添加目录以搜索手册页的正确方法?
小智 25
如果您只是设置 MANPATH,它会覆盖默认值并且您无法访问标准手册页。例如,man ls在设置 MANPATH 之前起作用,但在设置之后不起作用。
要在不覆盖默认值的情况下附加搜索目录,请在 MANPATH 前添加一个冒号,如下所示:
export MANPATH=":/path/to/custom/man"
Run Code Online (Sandbox Code Playgroud)
添加冒号使您可以访问标准系统手册页和 MANPATH 变量中引用的自定义页。
manpath(1)为您带来的这个答案:
如果设置了 $MANPATH,manpath 会显示它的值,而不是即时确定它。如果 $MANPATH 以冒号为前缀,则该变量的值将附加到根据配置文件的内容确定的列表中。如果冒号出现在变量值的末尾,则将确定的列表附加到变量的内容中。如果变量的值包含双冒号 (::),则将确定的列表插入值的中间,两个冒号之间。
虽然标题特别提到了该MANPATH变量,但我相信问题的原作者部分暗示的是是否有一种方法可以在不首先触及 MANPATH 变量的情况下向系统“添加”联机帮助页。
因此,除了接受的答案之外,我还想指出,在标准配置中,该manpage命令似乎还会查看PATH.
我还没有遇到过这方面的相关文档,但根据个人实验,我认为其工作方式如下:
假设您的 PATH 中有一个名为/dir1/dir2/dir3/dir4.
然后,将dir4通过搜索其父目录(即) ,并且如果这些目录之一包含名为或 的子目录,则相关的“man”目录将被添加到命令的输出中。dir3manpathmanshare/manmanpath
实际上,这意味着,例如,如果/home/user/.local/bin位于您的路径中,并且您还有一个名为 的目录/home/user/.local/share/man,则将拾取其中包含的任何联机帮助页。同样,如果类似的东西/opt/nano/bin在你的路径中,那么/opt/nano/share/man就会被拾取。
请注意,“拾取”是指该manpath命令将在其输出中包含该目录!man这些目录的内容仍然需要与for兼容,man才能从其中获取有效的联机帮助页。换句话说,您的home/user/.local/share/man目录应该包含一个man1包含大量.1文件的目录、一个man5包含很多.5文件的目录等,格式为 groff。
更新:根据下面的评论,manpath手册页现在完整地记录了从 man-db 2.10.0 开始的此行为。