Любая команда, запускаемая пользователем - будь то системная команда, компилятор или программа пользователя, выполняется в окружении, сформированном оболочкой. Это окружение формируется с помощью конфигурационных файлов. Механизм формирования окружения заключается, главным образом, в установке правильных значений для переменных окружения. К сожалению, в этом вопросе в UNIX-подобных системах единого стандарта нет.
В каждую версию системы включается несколько командных интерпретаторов и пользователю предлагается самому выбирать ту или иную оболочку. С точки зрения выполнения команд это никак не проявляется - любая внешняя команда или программа пользователя будет одинаковым образом выполняться в любой оболочке. А вот с точки зрения формирования среды и внутренних команд среды, различия имеются. Ранее упоминалось, что в UNIX-подобных системах поддерживаются два семейства оболочек (shell):
Bourne Shell (sh, ksh, bash) и
C Shell (csh, zsh, tcsh).
Оболочки имеют немного отличающийся синтаксис встроенных команд и используют различные конфигурационные файлы. Наибольшее распространение на сегодняшний день получили tcsh и bash, ставший фактически стандартным в Linux системах, поскольку в полной мере соответствует стандарту Posix.
Конфигурационные файлы:
bash - /etc/profile, ~/bash_profile, ~/bash_login, ~/.profile, ~/.bashrc
tcsh - /etc/csh.cshrc /etc/csh.login, ~/.login, ~/.cshrc ~/.tcshrc,
Таким образом видно, что часть установок делается системным администратором, а часть выполняется в персональных конфигурационных файлах каждого пользователя. Необходимые установки можно делать в любом из перечисленных файлах, но при этом следует иметь в виду, что некоторые конфигурационные файлы выполняются только один раз - при входе в систему, а другие каждый раз при запуске нового shell.
В оболочке bash действует следующий сценарий:
В оболочке tcsh действует следующий сценарий:
Переменные среды, устанавливаемые всеми оболочками, в основном совпадают, однако в каждой из оболочек имеются переменные, которые отсутствуют в других. Для того, чтобы посмотреть все установленные переменные среды служит команда:
env
Эта команда не является встроенной командой оболочки, поэтому она работает во всех оболочках. Перечислим наиболее важные переменные среды, которые могут потребовать корректировки:
Просмотр выполняется слева направо, исполняется первая найденная команда. Каталог ~/bin указывает на то, что команды(программы) следует искать в пользовательском каталоге bin, а '.' на то, что поиск выполнять в текущем каталоге. Проверить, из какого каталога какая будет исполнена команда можно с помощью команды:
which команда
В оболочке tcsh имеется переменная REMOTEHOST, которая позволяет автоматически устанавливать правильное значение для переменной DISPLAY при подключении с удаленного компьютера. В оболочке bash такой переменной, к сожалению, нет и для того, чтобы работать с графическими приложениями необходимо устанавливать эту переменную.
Некоторые приложения требуют установки своих переменных. Например, на многопроцессорных(многоядерных) системах выполнение многонитевых программ регулируется переменной OMP_NUM_THREADS, указывающей максимальное число нитей, которое может запускаться на системе.
Команда env выдает довольно большой объем информации. Для того, чтобы посмотреть значение конкретной переменной можно воспользоваться командой:
echo $ИМЯ_ПЕРЕМЕННОЙ - здесь символ $ означает извлечение значения переменной.
Установка переменных окружения по разному выполняется в bash и tcsh.
Bash
Tcsh