ИМЯ
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 [AT] perm.ru> 2004