Реймонд Эрик Стивен
Шрифт:
В языках С и С++ значения данных переменных запрашиваются с помощью библиотечной функции getenv(3). В языках Perl и Python во время запуска инициализируются объекты словарей среды. В других языках, как правило, используется одна из двух перечисленных моделей.
10.4.1. Системные переменные окружения
Существует множество широко известных переменных окружения, значения которых программа может получить при запуске из оболочки Unix. Данные переменные (особенно
Регистрационное имя учетной записи, под которым инициируется данный сеанс (BSD-соглашение).
Регистрационное имя учетной записи, под которым инициируется данный сеанс (соглашение System V).
Начальный каталог пользователя, инициализирующего данный сеанс.
Количество символьных столбцов управляющего терминала или окна эмулятора терминала.
Количество символьных строк управляющего терминала или окна эмулятора терминала.
Имя командной оболочки данного пользователя (часто используется командами, создающими подоболочку).
Список каталогов, которые просматривает оболочка при поиске исполняемых команд, соответствующих заданному имени.
Тип терминала для консоли сеанса или окна эмулятора терминала (предварительные сведения представлены в учебном примере terminfo в главе 6).
(Данный список характерен для Unix-систем, однако он не является исчерпывающим.)
Переменная
Следует отметить то, что некоторые или все данные системные переменные окружения могут не устанавливаться во время запуска программы, если программа запускается методом, отличным от создания подпроцесса в shell. В частности, демоны-слушатели какого-либо TCP/IP-сокета часто не имеют таких установленных переменных, а если имеют, то их значения едва ли будут полезны.
Наконец, следует отметить, что существует традиция (проиллюстрированная переменной
10.4.2. Пользовательские переменные окружения
Несмотря на то, что приложения могут свободно интерпретировать переменные окружения за пределами определенного системой набора, в настоящее время фактическое использование такой возможности является довольно необычным. Значения переменных окружения в действительности непригодны для передачи структурированной информации в программу (хотя в принципе это реализуемо посредством синтаксического анализа значений). Вместо этого в современных Unix-приложениях используются конфигурационные файлы, а также файлы профилей.
Существует, однако, несколько конструкторских моделей, в которых могут оказаться полезными переменные окружения, определяемые пользователем.
Независимые от приложения настройки, которые должны совместно использоваться большим количеством различных программ. Данный набор "стандартных" настроек изменяется исключительно медленно, поскольку множеству программ требуется опознать каждую настройку до того, как она станет полезной [98] . Ниже приводятся стандартные переменные.
98
Никто не знает действительно изящного способа представить эти распределенные данные о настройках. Переменные среды, вероятно, не являются этим способом, однако для всех известных альтернатив характерны одинаково неприятные проблемы.
Имя предпочтительного для пользователя редактора (часто используется командами, создающими подоболочку) [99] .
Имя предпочтительного для пользователя почтового агента (часто используется командами, создающими подоболочку).
Имя предпочитаемой пользователем программы для просмотра простого текста.
99
4 В действительности, большинство Unix-программ вначале проверяют переменную