Как мне исправить "ПУТЬ: неопределенная переменная". в 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
2 ответа
Сообщение об ошибке
MANPATH: undefined variable.
потому что Ubuntu не устанавливает MANPATH
по умолчанию (man
имеет встроенный путь поиска) и csh
(в отличие от оболочек Борна) не рассматривает неустановленные переменные как пустые.
Однако сам по себе он не должен препятствовать запуску оболочки ИЛИ любого скрипта C-shell.
Тем не менее, если вы хотите "исправить" это, вам нужно будет изменить ваш ~/.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
Команда, которую вы обнаружили , работает, автоматически делает правильные вещи. Он проверяет, есть ли MANPATH
переменная окружения и использует ее, если она существует (и непуста). Но если такой переменной среды нет (или она существует, но она пуста), manpath
консультируется с файлом конфигурации /etc/manpath.config
определить, какой должен быть manpath по умолчанию, и использовать его. Когда вы устанавливаете MANPATH
переменная окружения, записи в этом файле больше не используются автоматически, поэтому вы несете ответственность за MANPATH
содержит их, за исключением необычного случая, что вы не хотите их. 2
К счастью, это легко сделать, потому что вы можете просто использовать подстановку команд, чтобы включить выход из manpath
команда в значении, присвоенном MANPATH
переменная. Заменить линию ~/.cshrc
В настоящее время содержит с этим:
setenv MANPATH "`manpath`:$HOME/share/man"
Backticks (`
`
) выполнить подстановку команд в csh
а также tcsh
, В ракушках в стиле Борна bash
есть также $(
)
синтаксис для подстановки команд, который обычно предпочтительнее обратных кавычек, но это не относится к оболочкам языка Си. Вы не можете использовать $(
)
синтаксис с csh
/ tcsh
; они не поддерживают это.
1 Однако, как говорит Steeldriver, вы, вероятно, можете продолжить работу, не решая эту проблему. Большинство сценариев не используют man
команда, хотя некоторые могут. Даже если ваш скрипт устанавливает программное обеспечение, содержащее страницы справочника, он, скорее всего, не будет обращаться к текущему manpath, чтобы выяснить, где их разместить. Конечно, если его документация говорит, что это так, то это заменяет это предположение. Я предлагаю вам решить эту проблему, но вы, вероятно, можете продолжить, не делая этого.
2 The man
Команда использует ту же процедуру, чтобы решить, где искать справочные страницы, возможно, вызвав manpath
, Смотрите manpath (5) ( man 5 manpath
), который говорит: "Если переменная окружения $ MANPATH уже установлена, информация, содержащаяся в /etc/manpath.config, не будет переопределять ее". Путем тестирования я подтвердил, что это так. Например, бег env MANPATH=. man tcsh
из вашего домашнего каталога скажут No manual entry for tcsh
,