ENVIRON(5)

ИМЯ
environ - окружение пользователя

ОБЗОР
extern char **environ;

ОПИСАНИЕ
Переменная environ указывает на массив строк, называемый `environment' (окружение). (Данная переменная должна быть описана в программе пользователя, а кроме того она описывается в заголовочном файле unistd.h в том случае, если мы говорим о libc4 или libc5, а для glibc это справедливо только если был задан флаг _GNU_SOURCE ). Указанный массив строк, становится доступным процессу через вызов exec(3), который запускает процесс. По договорённости, эти строки имеют вид `имя=значение'. Вот некоторые примеры:

USER
    Имя пользователя, зарегистрированного в системе (используется некоторыми программами, происходящими из BSD)

LOGNAME
    Имя пользователя, зарегистрированного в системе (используется некоторыми программами, происходящими из System-V)

HOME
    Домашний каталог пользователя, устновленный программой login(1), взятый из файла паролей passwd(5).

LANG
    Имя локали (от локали зависят многие региональные настройки -- прим.пер.), используемой для категорий локали, которые не перекрыты LC_ALL или более специфичными переменными окружения, такими как LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC и LC_TIME. См. locale(5).

PATH
    Последовательность каталогов, которых sh(1) и многие другие программы, будут применять в качестве префикса при поиске файла, если он задан неполным именем. Каталоги разделяются `:'. (Похожим образом CDPATH используется некоторыми программами для поиска команды смены каталога, MANPATH используется командой man(1) для поиска страниц электронного руководства и т.д.)

PWD Текущий рабочий каталог. Устанавливается некоторыми программами.

SHELL
    Имя командного интерпретатора пользователя.

TERM
    Тип терминала, для которого будет подготавливаться вывод.

PAGER
    Предпочитаемая пользователем утилита просмотра текстовых файлов.

EDITOR/VISUAL
    Предпочитаемая пользователем утилита редактирования текстовых файлов.

BROWSER
    Предпочитаемая пользователем утилита просмотра URL. Последовательность, разделённых двоеточиями, команд-браузеров. См. See http://www.catb.org/~esr/BROWSER/ .

Вышеуказанные имена переменных могут быть помещены в окружение командой export и `имя=значение' в sh(1), или командой setenv, если вы используете csh(1). При вызове exec(3). в окружение также могут быть помещены и аргументы. Программа, написанная на языке C может манипулировать своим окружением с помощью функций getenv(3), putenv(3), setenv(3), и unsetenv(3). Заметим, что наличие или значения определённых переменных окружения может отказывать влияние на поведение многих программ и библиотечных вызовов. Вот случайная подборка:

Переменные LANG, LANGUAGE, NLSPATH, LOCPATH, LC_ALL, LC_MESSAGES, и т.д. влияют на управление региональными настройками, см. locale(5).

TMPDIR влияет на путь файлов, создаваемых вызовом tmpnam(3) и через некоторые другие вызовы, временный каталог также используется программой sort(1) и некоторыми другими, и т.д.

LD_LIBRARY_PATH, LD_PRELOAD и другие переменные LD_* влияют на поведение динамического загрузчика и редактора связей (компановщика).

POSIXLY_CORRECT делает поведение определённых программ и системных вызовов соответствующим POSIX.

На поведение malloc(3) оказывают влияние переменные MALLOC_*.

Переменная HOSTALIASES задаёт имя файла, содержащего псевдонимы имени узла, которые используются вызовом gethostbyname(3).

TZ и TZDIR задают информацию о временной зоне, используемую вызовом tzset(3) и такими функциями как ctime(), localtime(), mktime(), strftime(). См. также tzselect(1).

TERMCAP задаёт информацию о адресе терминала (или имя файла, содержащего такую информацию).

COLUMNS и LINES говорят приложению о размере окна, возможно перекрывая фактический размер.

PRINTER и LPDEST могут задавать предпочтительный принтер. См. lpr(1).

и т.д.

ОШИБКИ
Честно говоря, использование переменных окружения таит в себе проблемы безопасности. Многие системные команды могут быть обмануты пользователем, который может задать неправильные значения для переменных IFS или LD_LIBRARY_PATH. Также есть риск с загрязнением пространства имен. Такие программы как make и autoconf позволяют перекрывать имена назначенных по умолчанию утилит, через переменные окружения. Например, переменная CC используется для выбора нужного C-компилятора (и похожим образом можно использовать переменные MAKE, AR, AS, FC, LD, LEX, RM, YACC, и т.д.) Однако, в некоторых традиционных случаях, эти переменные окружения задают опции для данных программ, вместо их имени. Например MORE, LESS, и GZIP. Такое использование переменных окружения является ошибочным и будет избегаться в новых программах. Авторы gzip должны бы переименовать переменную в GZIP_OPT.

СМОТРИ ТАКЖЕ
login(1), sh(1), bash(1), csh(1), tcsh(1), execve(2), exec(3), getenv(3), putenv(3), setenv(3), clearenv(3), unsetenv(3), locale(5)

ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004