如何设置MANPATH而不覆盖默认值?


14

$PATH通过导出添加了额外的目录,PATH=/my/dirs:$PATH 但是我不确定是否应该对这样做MANPATH。因为default MANPATH为空,但man命令仍然有效。我找到了一个名为的命令manpath,其手册上写着If $MANPATH is set, manpath will simply display its contents and issue a warning.。这是否意味着设置MANPATH并不是为man命令添加目录以搜索手册页的正确方法?

Answers:


20

如果仅设置MANPATH,它将覆盖默认值,并且您将无法访问标准手册页。例如,man ls在设置MANPATH之前可以工作,但之后则不能工作。

要附加搜索目录而不覆盖默认目录,请在MANPATH前面加上一个冒号,如下所示:

export MANPATH=":/path/to/custom/man"

添加冒号使您可以访问标准系统手册页和MANPATH变量中引用的自定义页。

这个答案是manpath(1)带来的

如果设置了$ MANPATH,则manpath会显示其值,而不是即时确定它的值。如果$ MANPATH以冒号作为前缀,则变量的值将附加到由配置文件的内容确定的列表中。如果冒号位于变量值的末尾,则确定的列表将附加到变量的内容之后。如果变量的值包含双冒号(::),则将确定的列表插入到值的中间,即两个冒号之间。


1

IMO,您应该在PATH的末尾添加自定义目录

PATH=$PATH:/my/dirs

这样一来,您的自定义目录就不会超过系统的二进制文件/库,这是一个较小的安全问题。

您以相同的方式设置MANPATH(默认情况下,MANPATH为空)。

MANPATH=$MANTPATH:/my/dirs

您不需要使用行为良好的程序包设置MANPATH,因此,如果它没有损坏,请不要对其进行修复,如果它已损坏,则最好提交错误报告;)

将此添加到〜/ .bashrc

export PATH=$PATH:/my/dirs
export MANPATH=$MANPATH:/my/dirs

错字在第二句话? MANPATH=$MANTPATH:/my/dirs 也许应该是:MANPATH=$MANPATH:/my/dirs
kevinarpe

您所说的“行为良好的包裹”是什么意思?我有一整套通常未安装的工具(HPC群集通常将其放在/ opt中)。他们应该如何在不使用$ MANPATH的情况下注册其手册页?
i_grok 2014年

编写“行为良好的程序包”以使用标准路径和环境变量。表现不佳的软件包使用非标准软件包(至少对于Ubuntu而言),例如/ opt之类的路径,或者不使用环境变量,因此导致您观察到“我有一套通常没有安装的工具(HPC群集通常放在(/ opt)中的内容”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.