<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

Переменные окружения

Для настройки поведения многих программ служат так называемые переменные окружения.

Некоторые переменные окружения
НазваниеНазначение
PATH Пути для поиска программ -- список директорий, разделенных двоеточиями
PROMPT, prompt, PS1 Вид приглашения shell
DISPLAY Имя дисплея для X-программ
TERM Тип терминала
EDITOR Текстовый редактор, который будут использовать программы mc, vipw, crontab и т.д. вместо vi
PAGER Программа просмотра текстовых файлов, которую будут использовать команды man, apropos и т.д. (в Linux man и apropos по умолчанию используют /usr/bin/less -is
HOME* Домашняя директория пользователя
USER*
LOGNAME*
Login-имя пользователя
SHELL* Имя основного shell

Символом "*" помечены те переменные, которые являются "информационными" и которые не следует изменять.

Переменная prompt используется в Tcsh, PS1 -- в Bash, а в Zsh PROMPT и PS1 -- это просто два имени одной и той же переменной. Интерпретация этой переменной зависит от используемого shell; в Zsh это строка, в которой могут содержаться специальные %-последовательности, позволяющие вставлять в приглашение имя компьютера, текущей директории, время и т.д.

Работа с переменными окружения в значительной степени зависит от того, какой shell используется. В Zsh и Bash это делается одними командами, а в Tcsh -- другими. Мы рассмотрим команды, используемые в Zsh.

Чтобы присвоить значение переменной окружения или изменить его, используется команда export. Пример:

export DISPLAY=localhost:0

Вокруг символа "=" не должно быть пробелов, а если пробелы есть в присваиваемом значении, то его надо заключить в кавычки.

Чтобы посмотреть значение переменной, можно воспользоваться командой echo:

bobby:~% echo $DISPLAY
:0.0
bobby:~% echo $TERM
xterm
bobby:~% _

Посмотреть список всех переменных можно командой export без параметров.

Для удаления переменной окружения (это не то же самое, что присвоение ей пустой строки!) используется unset:

bobby:~% export VAR=abc
bobby:~% export | grep VAR
VAR=abc
bobby:~% export VAR=
bobby:~% export | grep VAR
VAR=''
bobby:~% unset VAR
bobby:~% export | grep VAR
bobby:~% _

Переменная окружения PATH

Эта переменная заслуживает того, чтобы поговорить о ней особо.

Когда мы пишем команду и нажимаем <Enter>, то shell (после проверки, не встроенная ли это команда) ищет исполняемый файл с таким именем по всем директориям, которые перечислены в PATH.

Хотя использование PATH очень похоже на то, что есть в Dos/Windows, имеются два важных отличия.

Во-первых, директории в списке разделяются не точками с запятыми, а двоеточиями (это сделано потому, что ";" -- специальный символ для shell -- разделитель команд).

Во-вторых, если в Dos PATH задает альтернативные директории для поиска команды, когда она не найдена в текущей, то в Unix команды ищутся только в директориях, перечисленных в PATH -- если "." там не указана (а обычно так и есть), то в текущей директории программа искаться не будет. Для запуска программы из текущей директории надо явно указать путь -- например, "./myprog".

Чтобы добавить, к примеру, директорию /usr/games в конец PATH, используется команда

export PATH=$PATH:/usr/games

Стартовые файлы shell

Переменные DISPLAY, TERM, HOME, USER/LOGNAME, SHELL и частично PATH устанавливаются автоматически соответствующими компонентами системы. Остальные же переменные надо или уставлять вручную, или из стартовых файлов shell -- как это всегда и делается.

При запуске каждый shell просматривает некоторые файлы, чтобы считать из них свои настройки и переменные окружения, а также для выполнения некоторых стартовых команд -- аналогично тому, что в Dos делается в файле autoexec.bat. Эти файлы называются стартовыми (startup files). Кроме того, практически все shell при выходе исполняют команды из файлов завершения (shutdown files) -- обычно в них помещают команду очистки экрана.

Имена стартовых файлов а также обращение с ними зависит от конкретного shell. Но они всегда представляют из себя обычные командные файлы. Рассмотрим этот механизм на примере Zsh, в котором он реализован наиболее последовательно и полно.

В Zsh есть три категории стартовых файлов.

Все файлы идут парами -- сначала shell берет файл из /etc/, в котором лежат общесистемные настройки, а затем -- из home-директории, так что каждый пользователь может подправить окружение по своему усмотрению. Если какого-либо из этих файлов нет, то никакого сообщения об ошибке не выдается. Zsh, в отличие от Bash, всегда просматривает оба файла -- и общесистемный, и пользовательский.

Естественно, крайне неразумно со стороны системного администратора вставлять какие-либо команды типа who в общесистемные login-файлы -- ведь пользователи не смогут изменить это поведение.

При завершении работы просматриваются файлы /etc/zlogout и ~/zlogout.

Данная последовательность полностью описана в man-странице по zsh.


<< 
Предыдущий раздел | /\ Содержание | >> Следующий раздел