Как я могу установить & ldquo; MANPATH: неопределенная переменная. & Rdquo; в 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 в 13:11

6 ответов

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

MANPATH: undefined variable. 

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

Однако он не должен сам по себе препятствовать запуску оболочки или любого скрипта C-shell.

Тем не менее, если вы хотите «исправить» его, вам нужно будет изменить свой [ f6], чтобы проверить, установлен ли MANPATH или нет, и обрабатывать два случая соответственно - что-то вроде

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

Однако он сам по себе не должен препятствовать оболочке ИЛИ любому скрипту C-оболочки от запуска. Я не говорю о синтаксисе csh, поэтому YMMV.

2
ответ дан 22 May 2018 в 17:19
  • 1
    Я подтвердил, что, когда MANPATH установлен, команда man делает не использовать /etc/manpath.config. Поэтому, если MANPATH не был определен и затем установлен в ${HOME}/share/man, то будет удерживать man от поиска управляемых системой manpages. Извините за возвращение и назад (в случае, если вы видели мои предыдущие комментарии, которые я с тех пор удалил). Я отправлю ответ. Во всяком случае, самая важная часть этого ответа - обычно вам не нужна команда man для работы в оболочке, которая запускает скрипт, поскольку большинство скриптов не использует его - это полностью правильно. Если сценарий OP не работает, это, скорее всего, по другой причине. – Eliah Kagan 21 October 2017 в 17:40
  • 2
    Скрипт выполнялся после этого исправления, однако показал некоторые другие ошибки компиляции, которые не связаны с этим сообщением. Спасибо, парни. – Ather Cheema 21 October 2017 в 17:53
  • 3
    @AtherCheema Обратите внимание, что важная часть этого ответа для ваших целей - то, что неопределенная переменная " ошибка не будет препятствовать компилятору - это правильно, но метод, показанный здесь, не даст должным образом работающего manpath. Если вы этого хотите, см. мой ответ . Если вас это не волнует, вы можете просто удалить строку, которая вызывает ошибку с ~/.cshrc (что фактически позволит команде man работать с страницами, предоставленными системой). Или, если это единственная строка в ~/.cshrc, вы даже можете удалить ~/.cshrc. Вы можете опубликовать новый вопрос о помощи в новых ошибках. – Eliah Kagan 21 October 2017 в 17:58

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

MANPATH: undefined variable.

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

Однако он не должен сам по себе препятствовать запуску оболочки или любого скрипта C-shell.

Тем не менее, если вы хотите «исправить» его, вам нужно будет изменить свой ~/.cshrc, чтобы проверить, установлен ли MANPATH или нет, и обрабатывать два случая соответственно - что-то вроде

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

Однако он сам по себе не должен препятствовать оболочке ИЛИ любому скрипту C-оболочки от запуска. Я не говорю о синтаксисе csh, поэтому YMMV.

2
ответ дан 18 July 2018 в 04:55

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

MANPATH: undefined variable.

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

Однако он не должен сам по себе препятствовать запуску оболочки или любого скрипта C-shell.

Тем не менее, если вы хотите «исправить» его, вам нужно будет изменить свой ~/.cshrc, чтобы проверить, установлен ли MANPATH или нет, и обрабатывать два случая соответственно - что-то вроде

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

Однако он сам по себе не должен препятствовать оболочке ИЛИ любому скрипту C-оболочки от запуска. Я не говорю о синтаксисе csh, поэтому YMMV.

2
ответ дан 24 July 2018 в 18:11

Измените ${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, за исключением необычного случая, который вам не нужен. 1

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

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

Backticks (` `) выполняют подстановку команд в csh и tcsh. В оболочках типа Bourne, таких как bash, есть также синтаксис $( ) для подстановки команд, который обычно предпочтительнее обратных шагов, но подстановка команды . Вы не можете использовать синтаксис $( ) с csh / tcsh; они не поддерживают его.

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

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

1
ответ дан 22 May 2018 в 17:19

Измените ${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, за исключением необычного случая, который вам не нужен. [D4] 1

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

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

Backticks (` `) выполняют подстановку команд в csh и tcsh. В оболочках типа Bourne, таких как bash, есть также синтаксис $( ) для подстановки команд, который обычно предпочтительнее обратных шагов, но подстановка команды . Вы не можете использовать синтаксис $( ) с csh / tcsh; они не поддерживают его.

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

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

1
ответ дан 18 July 2018 в 04:55

Измените ${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, за исключением необычного случая, который вам не нужен. [D4] 1

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

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

Backticks (` `) выполняют подстановку команд в csh и tcsh. В оболочках типа Bourne, таких как bash, есть также синтаксис $( ) для подстановки команд, который обычно предпочтительнее обратных шагов, но подстановка команды . Вы не можете использовать синтаксис $( ) с csh / tcsh; они не поддерживают его.

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

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

1
ответ дан 24 July 2018 в 18:11

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

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