Я устанавливаю некоторое программное обеспечение с открытым исходным кодом путем компиляции его исходного кода - на 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
Сообщение об ошибке
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.
${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
.