我正在尝试为我编写的一个小型 Perl 实用程序创建一个 Makefile,并且我正在努力寻找一种方法来找到在make
作为运行时安装我的手册页的位置非根用户。
我目前正在解析输出manpath
以找出$HOME
目录中的第一个路径......并且它几乎工作正常。
我找到的路径是~/man
和~/share/man
唯一的问题是,如果这些目录一开始就不存在,manpath
则不会输出任何目录。
问题
- 有没有一种可移植的方法来找出我应该在用户的 $HOME 目录中安装手册页的位置?
- 如果不是,应该优先选择哪一个?
答案1
您可以将手册页放在此目录中:
$HOME/.local/share/man
直接访问
然后您可以使用以下命令直接访问它们man
:
man $HOME/.local/share/man/manX/manpage.1.gz
$MANPATH
您可以$MANPATH
使用命令检查是什么manpath
,或者回显环境变量$MANPATH
。
例子
$ manpath
manpath: warning: $MANPATH set, ignoring /etc/man_db.conf
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man
$ echo $MANPATH
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man
您可以临时向 MANPATH 添加内容:
MANPATH=$HOME/.local/share/man:$MANPATH
如果您想使其永久化,请在您的/etc/profile.d/
目录中添加一个名为myman.bash
上述MANPATH=
行的文件。这将在整个系统范围内为每个人获取。如果您希望它只适合您,请将其添加到您的$HOME/.bash_profile
或$HOME/.bashrc
.
参考
答案2
我已经安装了一些我编译的应用程序,并分别configure
设置了安装在${HOME}/usr/local
.
我发现现在我有目录
~/usr/local/share/man/man1
~/usr/local/share/man/man3
~/usr/local/share/man/man5
带有手册页gnuplot.1
, gnuplot-ja.1
, python3.1
, python3.5.1
, libpng.3
, libpngpf.3
, zlib.3
, png.5
, 所以我猜(给定我的前缀)对于本地安装的应用程序来说这是一个非常标准的位置。
对于必须手动选择本地man
目录的情况,它是一个候选位置。
man
当然,可以为具有以下内容的页面添加任意路径(即使在通常提到的情况下也应该这样做):
export MANPATH="$HOME/usr/local/share/man${MANPATH:+:${MANPATH}}"
(参见Appending/Prepending 的防弹方式用于处理):
中的冒号PATH
。
答案3
回答并附上描述
我在 Windows 7 上运行 Cygwin。当我尝试时
echo $MANPATH
我什么也没得到。这是我寻找新man
页面放置位置的便携式方法。
$ { find / -maxdepth 2 -type d -name "*man*" 3>&2 2>&1 1>&3 | \
grep -v 'Permission denied' >&3; } 3>&2 2>&1
(关于这个疯狂命令的注释位于这个答案的底部。)
您可以简单地替换/
为~
.另一种可能性是在另请注意下面的部分。
在我的机器上,find
命令返回:
/etc/openwsman
/lib/filemanager-actions
/lib/gnome-commander
/lib/help2man
/lib/window-manager-settings
/share/man
/usr/man
对我来说,这意味着有两种可能性:/share/man
和/usr/man
。
我选择使用/usr/man
,你不会,但我需要做更多的探索。
$ ls -l /usr/man
total 0
drwxr-xr-x+ 1 me Users 0 April 31 17:13 man1
因此,当我将新man
文件放在doc/
工作目录的子目录中时,我使用了
$ cp -R doc/* /usr/man/man1
现在,我可以通过输入以下内容来获取我的“手册”
$ man my_new_executable
如果您没有看到可能的候选者,您可以删除这部分或更改它,例如,更改为-maxdepth 3
、 或4
、 或5
,或者无论需要多深才能找到您需要的内容。当我这样做时3
,我发现了另外两个候选者,/var/cache/man
并且usr/share/man
,但我已经找到了一个可行的解决方案,所以我没有打扰他们。
另请注意
我相信/share/man/man1
或者/var/cache/man
可以按照您的要求提供给非 root 用户。如果我错了,请纠正我。
承诺的注释在底部
请注意,我使用了-maxdepth 2
选项find
,因为我认为该man
目录将位于文件系统根目录的两个目录内,并且我不想获得太多以某种方式具有子字符串的无关目录man
,就像那样/lib/gnome-co
男人der
。
周围的额外内容是为了在您无权访问或 的情况下find
抑制任何错误。Permission denied
su
sudo
这里是对正在发生的事情的一个很好的描述。 (查找以“gniourf_gniourf”开头的行。)