系统通常有多个版本的二进制文件,选择哪个版本取决于$PATH
.例如,我正在使用的系统有几个版本:
$ which sort
~/coreutils-8.25/bin/sort
$ ~/coreutils-8.25/bin/sort --version | head -n 1
sort (GNU coreutils) 8.25
$ /bin/sort --version | head -n 1
sort (GNU coreutils) 8.4
在我使用的系统上,通过调用选择 GNU coreutils 8.25 的版本,sort
因为它在PATH
.然而,MANPATH
系统上的环境变量已建立,以便sort
显示 GNU coreutils 8.4 的手册页(即, for /bin/sort
,它不是具有优先级的二进制文件)。
这种情况产生了一个由三部分组成的问题。
首先,是否有一种简单的方法来指示man
(或外壳程序)使用或生成MANPATH
反映的形式PATH
,或者必须手动执行此操作(即,通过查找与中的每个条目关联的手册页的路径,PATH
然后以与 相同的顺序连接这些人路径PATH
,每次更改PATH
) 时都必须重复这个练习?如果有一种机制可以在PATH
和之间建立一致性MANPATH
,那么就会自动显示预期的手册页,从而避免无意中阅读默认使用版本以外的版本的手册页的问题。
其次,是否有一个命令可以让您快速确定默认手册页的路径(例如,类似于 的命令which "man sort"
,它将报告执行时显示的手册页的路径man sort
)。例如,当我键入 时man sort
,我没有指示系统上正在传送到寻呼机的特定文件。
第三,有没有办法获取命令的显式版本的手册页(类似于man ~/coreutils-8.25/bin/sort
我的 GNU coreutils 8.25 版本的手册页,而不是必须追踪关联的文件,在我的例子中可以找到为 ~/coreutils-8.25/share/man/man1/sort.1 或 ~/coreutils-8.25/man/sort.1)。
答案1
为了当地的诸如此类的安装,我使用 shell 脚本来设置PATH
、LD_LIBRARY_PATH
和MANPATH
值,以便获得一致的结果。如果没有这样的道具,你会不是获得自动一致的结果。
这是一个旧的例子:
#!/bin/bash
# $Id: with-ncurses,v 1.1 2006/09/02 23:04:39 tom Exp $
export LIBS="-lncursesw"
for prefix in \
/usr/local/ncurses6
do
test -f $prefix/lib/libncursesw.so && break
test -f $prefix/lib/libncursesw.a && break
done
if [ -d $prefix/include/ncursesw ] ; then
export CPPFLAGS="-I$prefix/include/ncursesw $CPPFLAGS"
if [ $prefix != /usr ] ; then
export CPPFLAGS="-I$prefix/include $CPPFLAGS"
fi
fi
if [ $prefix != /usr ] ; then
export PATH=`newpath -bd $prefix/bin`
export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $prefix/lib`
export LIBS="-L$prefix/lib $LIBS"
# this doesn't work for db30:
# export LIBS="-static -L$prefix/lib $LIBS -shared"
fi
case `partition` in
rh*|md*)
export MANPATH=$prefix/man:`manpath`
;;
*)
export MANPATH=$prefix/man:`manpath -q`
;;
esac
eval $*
制作这样的脚本便携的这是一个问题,因为没有MANPATH
使用方式的标准。但您可以针对特定系统进行类似的调整。
顺便说一句,该脚本使用newpath
修改这些变量并避免重复。
答案2
2. 你快要拥有它了。
man -w sort
向你展示w这里它获取 的手册页sort
。
1 和 3。可能不会,因为手册页可以在任何地方。
3.您可以进行暴力搜索:
find / -name "sort.1*"
答案3
将以下内容添加到您的~/.bashrc
或~/.profile
:
export MANPATH="$HOME/coreutils-8.25/share/man:$(manpath)"
这会将您的手册页树首先放入 $MANPATH 中,位于默认 MANPATH 之前(由命令提供manpath
)
答案4
假设您将手册页放在可执行文件旁边(即可执行文件在 中/somewhere/bin
,手册页在 中/somewhere/man/manSECTION
),并且您正在使用带有manpath
命令,例如大多数 Linux 系统以及 FreeBSD 和 OS X,只需运行manpath
.它构造一个MANPATH
与您的“PATH”平行的变量。
unset MANPATH
MANPATH=$(manpath)