시스템에는 종종 여러 버전의 바이너리가 있으며 어떤 버전을 선택하느냐에 따라 달라집니다 $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
제가 사용하고 있는 시스템에서는 sort
그대로 호출하여 GNU coreutils 8.25 버전을 선택합니다 PATH
. 그러나 MANPATH
시스템의 환경 변수는 sort
GNU coreutils 8.4의 매뉴얼 페이지가 표시되도록 설정되어 있습니다. /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
~을 위한현지의이와 같은 설치의 경우 일관된 결과를 얻기 위해 쉘 스크립트 를 사용하여 및 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
보여줘승여기서는 맨 페이지를 가져옵니다 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에서와 같은 명령을 실행하면 "PATH"와 평행 manpath
한 변수가 생성됩니다 .MANPATH
unset MANPATH
MANPATH=$(manpath)