несоответствие между путями для двоичной и служебной страницы

Системы часто имеют несколько версий двоичных файлов, и один из них зависит от приоритета в $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 среды MANPATH в системе была установлена ​​таким образом, что MANPATH страница для sort из GNU coreutils 8.4 (т. MANPATH Для /bin/sort , которая не является приоритетом двоичного файла).

Из этого сценария возникает трехчастный вопрос.

Во-первых, есть ли простой способ проинструктировать man (или оболочку) использовать или создавать форму MANPATH которая отражает PATH , или нужно делать это вручную (т. MANPATH поиска путей к страницам руководства, которые связаны с каждой записью в PATH и затем конкатенировать эти пути человека в том же порядке, что и PATH , упражнение, которое нужно было бы повторить в любое время, когда будет изменено PATH )? Был ли механизм для установления соответствия между PATH и MANPATH , тогда ожидаемая страница руководства будет отображаться автоматически, избегая проблемы непреднамеренного чтения MANPATH страницы для версии, отличной от той, которая используется по умолчанию.

Во-вторых, есть ли команда, которая позволяет быстро определить путь к странице управления по умолчанию (например, нечто похожее на то, which "man sort" , который будет сообщать о пути справочной страницы, отображаемой при выполнении man sort ). Например, когда я печатаю man sort , у меня нет указаний на конкретный файл в системе, которая доставляется на пейджер.

В-третьих, есть ли способ получить man-страницу для явной версии команды (что-то вроде man ~/coreutils-8.25/bin/sort в моем случае для версии рода GNU coreutils 8.25, а не для отслеживания связанный файл, который, в моем случае, может быть ~ / coreutils-8.25 / share / man / man1 / sort.1 или ~ / coreutils-8.25 / man / sort.1).

Для локальной установки, такой как я, я использую shell-script для настройки значений 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 является проблемой, поскольку нет стандартов для использования MANPATH . Но вы можете адаптировать такие вещи для конкретных систем.

Скрипт, кстати, использует newpath для изменения этих переменных и избежания дубликатов.

2. У вас почти есть это. man -w sort показывает, что вы здесь, чтобы получить справочную страницу для sort .

1 и 3. Наверное, нет, поскольку справочные страницы могут быть где угодно.
3. Вы можете выполнить поиск грубой силы:

 find / -name "sort.1*" 

Добавьте в свой файл ~/.bashrc или ~/.profile :

 export MANPATH="$HOME/coreutils-8.25/share/man:$(manpath)" 

Это поместит ваше дерево персонажей в $ MANPATH прежде, чем MANPATH по умолчанию (как указано в команде manpath)

Предполагая, что вы помещаете страницы своего человека рядом с вашими исполняемыми файлами (например, исполняемые файлы в /somewhere/bin , man-страницы в /somewhere/man/manSECTION ), и вы используете man-реализацию с командой manpath , такой как большинство Linux-систем и FreeBSD и OS X, просто запустите manpath . Он MANPATH переменную MANPATH которая параллельна вашему `PATH.

 unset MANPATH MANPATH=$(manpath)