Как делают я фиксирую “MANPATH: неопределенная переменная”. в csh?

Я устанавливаю некоторое программное обеспечение с открытым исходным кодом путем компиляции его исходного кода - на Ubuntu 16.04 - путем следования инструкциям в его 'readme' файле. В определенный момент (точка 3b в ссылке) инструкция требует, чтобы я выполнил .csh файл, расположенный в определенном каталоге, для генерации исполняемых файлов. Когда я выполняю необходимый csh сценарий от терминала в необходимом каталоге путем ввода ./compile_all.csh, или выполненный csh для запуска интерактивной оболочки я встречен следующей строкой на терминале:

MANPATH: undefined variable. 

Кто-либо может вести меня, как я могу зафиксировать эту ошибку?

Следующее является результатом manpath управляйте при казни от терминала Ubuntu:

~$ manpath
/home/atrcheema/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man

~./cshrc файл, содержавший всего одна строка, как замечено выполнением следующей команды:

:/home$ vim ~/.cshrc
setenv MANPATH ${MANPATH}:${HOME}/share/man

Первые несколько строк compile_all.csh следующие:

#!/bin/csh

####### section added by York Prado 10/2009
if( ! (-e /usr/bin/f77 || -e /bin/f77 || -e /usr/local/bin/f77) ) then 
echo "f77 command is not found"
echo "Please make sure you have the fortran 77 compiler installed"
exit 1
endif 

# section below moved to compile_hspf_libs.csh
#cd hspf/lib3.2/src/util
#make clean 
#make 
#make install 
#cd ../ 
#cd wdm/
#make clean
#make 
#make install
#cd ../
#cd adwdm/
#make clean
##make
#make install
#echo "Compiled all the lib3.2 files needed to compile the CBWM"
#cd ../../../../ 

######### end York Prado section

cd lib/dsn/
f77 -c dsn_utils.f

cd ../util
rm ../util_lib.a
./compile
cd ../get
rm ../get_lib.a
./compile
cd ../tty/
gcc -c -o ../ttyux.o ttyux.c
1
задан 13 November 2017 в 12:11

2 ответа

Сообщение об ошибке

MANPATH: undefined variable. 

то, потому что Ubuntu не устанавливает MANPATH по умолчанию (man имеет встроенный путь поиска), и csh (в отличие от Оболочек Bourne), не рассматривает переменные сброса как пустые.

Однако это не должно сам по себе препятствовать тому, чтобы оболочка ИЛИ любой сценарий оболочки C работали.

Тем не менее, если Вы захотите "зафиксировать" его, то необходимо будет изменить Ваш ~/.cshrc файл, чтобы проверить, ли MANPATH установлен или не, и рассматривайте эти два случая соответственно - что-то как

if ( ${?MANPATH} ) then 
  setenv MANPATH ${MANPATH}:${HOME}/share/man
else 
  setenv MANPATH ${HOME}/share/man
endif

ПРАВОВАЯ ОГОВОРКА я не быстр в csh синтаксис так YMMV.

2
ответ дан 7 December 2019 в 12:31

Изменение ${MANPATH}:${HOME}/share/man кому:"`manpath`:$HOME/share/man".

Ваш ~/.cshrc файл содержит (и на самом деле состоит полностью из), команда, намерение которой состоит в том, чтобы увеличить список каталогов в который man команда будет искать страницы руководства:

setenv MANPATH ${MANPATH}:${HOME}/share/man

Однако это не обычно корректный способ достигнуть этого, и он не работает на Вашу ситуацию, потому что MANPATH переменная среды не существует. Это - то, что производит Ваше ошибочное сообщение 1

manpath команда, которую Вы нашли, действительно работает, автоматически делает правильную вещь. Это проверяет, существует ли a MANPATH переменная среды и использование это, если это существует (и непусто). Но если нет такой переменной среды (или это существует, но является пробелом), manpath консультируется с конфигурационным файлом /etc/manpath.config определить то, чем значение по умолчанию manpath должно быть, и использование это. Когда Вы устанавливаете MANPATH переменная среды, записи в том файле автоматически больше не используются, таким образом, Вы ответственны за обеспечение этого MANPATH содержит их, кроме необычного случая, что Вы не хотите их 2

К счастью, это легко сделать, потому что можно просто использовать замену команды для включения ouptut manpath команда в значении, присвоенном MANPATH переменная. Замените строку ~/.cshrc в настоящее время содержит с этим:

setenv MANPATH "`manpath`:$HOME/share/man"

Обратные галочки (` `) выполните замену команды в csh и tcsh. В стиле Границы окружает как bash, существует также a $( ) синтаксис для замены команды, которая обычно предпочтительна для обратных галочек, но это не относится к оболочкам C. Вы не можете использовать $( ) синтаксис с csh/tcsh; они не поддерживают его.


1 Однако, поскольку steeldriver говорит, можно, вероятно, продолжить двигаться, не решая эту проблему. Большинство сценариев не использует man команда, хотя некоторые могут. Даже если Ваш сценарий установит программное обеспечение, которое включает страницы руководства, то это не будет, вероятно, консультироваться с текущим manpath для выяснения, куда поместить их. Конечно, если в его документации говорится, что она делает, затем это заменяет это предположение. Я действительно предлагаю, чтобы Вы решили эту проблему, но можно, вероятно, продолжить двигаться, не делая так.

2 man управляйте использует ту же процедуру для решения, где искать страницы руководства, возможно путем вызова manpath. См. manpath (5) (man 5 manpath), который говорит, "Если $MANPATH переменной среды будет уже установлен, то информация, содержавшая в/etc/manpath.config, не переопределит его". Я подтвердил, путем тестирования, это дело обстоит так. Например, выполнение env MANPATH=. man tcsh из Вашего корневого каталога скажет No manual entry for tcsh.

1
ответ дан 7 December 2019 в 12:31

Другие вопросы по тегам:

Похожие вопросы: