<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Для настройки поведения многих программ служат так называемые переменные окружения.
Название | Назначение |
---|---|
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:~% _ |
Эта переменная заслуживает того, чтобы поговорить о ней особо.
Когда мы пишем команду и нажимаем <Enter>, то shell (после проверки, не встроенная ли это команда) ищет исполняемый файл с таким именем по всем директориям, которые перечислены в PATH.
Хотя использование PATH очень похоже на то, что есть в Dos/Windows, имеются два важных отличия.
Во-первых, директории в списке разделяются не точками с запятыми, а двоеточиями (это сделано потому, что ";" -- специальный символ для shell -- разделитель команд).
Во-вторых, если в Dos PATH задает альтернативные директории для поиска команды, когда она не найдена в текущей, то в Unix команды ищутся только в директориях, перечисленных в PATH -- если "." там не указана (а обычно так и есть), то в текущей директории программа искаться не будет. Для запуска программы из текущей директории надо явно указать путь -- например, "./myprog".
Чтобы добавить, к примеру, директорию /usr/games в конец PATH, используется команда
export PATH=$PATH:/usr/games
Переменные DISPLAY, TERM, HOME, USER/LOGNAME, SHELL и частично PATH устанавливаются автоматически соответствующими компонентами системы. Остальные же переменные надо или уставлять вручную, или из стартовых файлов shell -- как это всегда и делается.
При запуске каждый shell просматривает некоторые файлы, чтобы считать из них свои настройки и переменные окружения, а также для выполнения некоторых стартовых команд -- аналогично тому, что в Dos делается в файле autoexec.bat. Эти файлы называются стартовыми (startup files). Кроме того, практически все shell при выходе исполняют команды из файлов завершения (shutdown files) -- обычно в них помещают команду очистки экрана.
Имена стартовых файлов а также обращение с ними зависит от конкретного shell. Но они всегда представляют из себя обычные командные файлы. Рассмотрим этот механизм на примере Zsh, в котором он реализован наиболее последовательно и полно.
В Zsh есть три категории стартовых файлов.
В них следует помещать команды настройки переменных окружения. Ни в коем случае нельзя вставлять сюда команды, выводящие что-либо на терминал или еще как-либо с ним взаимодействующие (например, stty)!
В эти файлы следует помещать определения функций (functions), псевдонимов (aliases) и настроек клавиш (key bindings) -- т.е. те настройки, что используется при интерактивной работе shell.
В эти файлы можно вставлять команды, выводящие на экран какую-либо информацию -- например, команду who, чтобы при входе в систему автоматически показывался список пользователей.
Все файлы идут парами -- сначала shell берет файл из /etc/, в котором лежат общесистемные настройки, а затем -- из home-директории, так что каждый пользователь может подправить окружение по своему усмотрению. Если какого-либо из этих файлов нет, то никакого сообщения об ошибке не выдается. Zsh, в отличие от Bash, всегда просматривает оба файла -- и общесистемный, и пользовательский.
Естественно, крайне неразумно со стороны системного администратора вставлять какие-либо команды типа who в общесистемные login-файлы -- ведь пользователи не смогут изменить это поведение.
При завершении работы просматриваются файлы /etc/zlogout и ~/zlogout.
Данная последовательность полностью описана в man-странице по zsh.
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел