二进制文件和手册页路径之间的差异

二进制文件和手册页路径之间的差异

系统通常有多个版本的二进制文件,选择哪个版本取决于$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 脚本来设置PATHLD_LIBRARY_PATHMANPATH值,以便获得一致的结果。如果没有这样的道具,你会不是获得自动一致的结果。

这是一个旧的例子:

#!/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)

相关内容