$PATH
我已通过导出添加了额外的目录PATH=/my/dirs:$PATH
,但我不确定是否应该对执行相同操作MANPATH
。因为默认MANPATH
值为空,但man
命令有效。我找到了一个名为的命令manpath
,其手册上写着。这是否意味着设置 MANPATH 不是为命令添加目录以搜索手册页的If $MANPATH is set, manpath will simply display its contents and issue a warning.
正确方法?man
答案1
如果您只是设置 MANPATH,它将覆盖默认值,您将无法访问标准手册页。例如,man ls
在设置 MANPATH 之前有效,但在设置 MANPATH 之后无效。
要附加搜索目录而不覆盖默认目录,请在 MANPATH 前面加上冒号,如下所示:
export MANPATH=":/path/to/custom/man"
添加冒号可让您访问标准系统手册页和 MANPATH 变量中引用的自定义页面。
此答案由人路(1):
如果设置了 $MANPATH,manpath 将显示其值,而不是动态确定它。如果 $MANPATH 以冒号为前缀,则变量的值将附加到根据配置文件内容确定的列表中。如果冒号位于变量值的末尾,则确定的列表将附加到变量的内容中。如果变量的值包含双冒号 (::),则确定的列表将插入到值的中间,即两个冒号之间。
答案2
虽然标题特别提到了这个MANPATH
变量,但我相信这个问题的原作者部分暗示的是有一种方法可以“添加”手册页到系统中,而无需首先触及 MANPATH 变量。
因此,除了可以接受的答案之外,我还想指出,在标准配置中,该manpage
命令似乎还会查看PATH
.
我还没有找到相关文档,但从个人实验来看,我认为其工作方式如下:
假设您的 PATH 中有一个名为 的目录/dir1/dir2/dir3/dir4
。
然后,dir4
作为出色地因为它的父级(即dir3
)将被搜索manpath
,并且如果man
其中一个目录包含一个名为或 的子目录share/man
,那么相关的“man”目录将被添加到命令的输出中manpath
。
实际上,这意味着,例如,如果/home/user/.local/bin
在您的路径中,并且您还有一个名为 的目录/home/user/.local/share/man
,则将拾取其中包含的任何手册页。同样,如果/opt/nano/bin
在您的路径中,/opt/nano/share/man
则将拾取类似 的内容。
请注意,我说的“拾取”是指该manpath
命令将在其输出中包含该目录!这些目录的内容仍然需要与 for 兼容,man
以便man
从其中拾取有效的手册页。换句话说,您的home/user/.local/share/man
目录应该包含一个man1
包含大量.1
文件的目录、一个man5
包含大量.5
文件的目录等。groff 格式。
更新:根据下面的评论,manpath
从 man-db 2.10.0 开始,手册页现在完整记录了这种行为。
答案3
您应该在末尾添加自定义目录PATH
:
PATH=$PATH:/my/dirs
这样,您的自定义目录就不会覆盖系统二进制文件和库,这可能会导致安全问题。
您可以以MANPATH
相同的方式设置(MANPATH
默认为空):
MANPATH=$MANPATH:/my/dirs
您不需要设置一个MANPATH
具有良好行为的软件包,因此如果它没有损坏,就不要修复它。如果它损坏了,也许您最好提交错误报告 ;)
将其添加到~/.bashrc
:
export PATH=$PATH:/my/dirs
export MANPATH=$MANPATH:/my/dirs