Окружение процессов
Окружение - это набор пар (имя, значение), который передается выполняемой программе так же, как и обычный список аргументов. Иными словами, порождаемые процессы наследуют окружение процесса-предка. Компонентами окружения являются, помимо прочих, следующие переменные и их значения:
HOME
Подразумеваемый аргумент утилиты смены текущего каталога cd - домашний каталог пользователя.
IFS
Цепочка символов, где перечислены разделители полей; обычно включает пробел, табуляцию и перевод строки.
PATH
Список имен каталогов для поиска команд. В дальнейшем подобные списки называются списками поиска. Элементы списка разделяются двоеточием. Пустой элемент означает текущий каталог.
PS1
Основное приглашение интерактивного языка shell (по умолчанию "$").
TERM
Тип пользовательского терминала.
TZ
Информация о часовом поясе.
Для отсылки информации об окружении на стандартный вывод следует воспользоваться командой
env
Поясним подробнее смысл некоторых переменных окружения.
Прежде чем выполнить команду, shell ищет файл с соответствующим именем в последовательности каталогов, являющейся значением переменной PATH. Назовем подобную последовательность списком поиска. Если, например, значение $PATH суть
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
то нужный файл будет сначала разыскиваться в каталоге /usr/local/bin, затем в /bin и т.д. Как только файл отыщется, поиск прекратится. Это важно, если в разных каталогах есть одноименные выполнимые файлы.
Значение $IFS влияет не только на разбор команд, но и на чтение строк данных с помощью команды read (см. далее). Кроме того, первый символ из значения $IFS вставляется между фактическими аргументами при выполнении подстановки $*.
Переменная TERM хранит тип терминала пользователя. Интерактивные утилиты (редакторы или другие программы с экранным интерфейсом, например talk) с помощью значения $TERM настраиваются на конкретный тип терминала.
Переменная TZ задает локальный часовой пояс. Эта информация необходима всегда, когда требуется показать текущее время.
Особенно полезна она при почтовом взаимодействии с территориально удаленными (в частности, зарубежными) пользователями.
Для изменения окружения мало присвоить новое значение соответствующей переменной. Дело в том, что по умолчанию переменные считаются локальными по отношению к shell-процедуре, т. е. присваивание изменит локальную переменную, но не затронет одноименную переменную окружения. Таким образом, в окружение новых процессов (порожденных, например, для выполнения последующих команд данной shell-процедуры) войдет переменная со старым значением.
С помощью конструкции
export имя[=слово]
переменная с указанным именем и значением (последнее может быть опущено) помещается в окружение, т. е. становится глобальной.
Следующая строка иллюстрирует типичное применение команды export:
export PATH=/local/bin:$PATH
Переменная PATH изменилась, и новое значение экспортировано в окружение.
Команда
export -p
выдает на стандартный вывод имена и значения всех экспортированных переменных. Эту выдачу можно использовать для сохранения и последующего восстановления (быть может, с некоторыми модификациями) окружения. Ниже приведен фрагмент возможного результата работы команды export -p (см. листинг 2.17).
export HISTSIZE="1000" export HOME="/home/galat" export LANG="C" export LESSCHARSET="koi8-r" export LOGNAME="galat" export MAIL="/var/spool/mail/galat" export TTY="/dev/ttyS4" export USER="galat"
Листинг 2.17. Возможные результаты выполнения команды export -p. (html, txt)
Мы видим, что выдача устроена так, чтобы вновь быть поданной на вход командного интерпретатора.