environ (7) ( FreeBSD man: Макропакеты и соглашения )
environ (7) ( Linux man: Макропакеты и соглашения )
ИМЯ
environ - окружение пользователя
ОБЗОР
extern char **environ;
ОПИСАНИЕ
Переменная
environ
указывает на массив строк, называемый `environment' (окружение).
(Данная переменная должна быть описана в программе пользователя,
а кроме того она описывается в заголовочном файле
unistd.h
в том случае, если мы говорим о libc4 или libc5, а для glibc
это справедливо только если был задан флаг
_GNU_SOURCE ).
Указанный массив строк, становится доступным процессу через вызов
exec(3),
который запускает процесс. По договорённости, эти строки имеют
вид `имя=значение'. Вот некоторые примеры:
USER
Имя пользователя, зарегистрированного в системе (используется некоторыми
программами, происходящими из BSD)
LOGNAME
Имя пользователя, зарегистрированного в системе (используется некоторыми
программами, происходящими из System-V)
Имя локали (от локали зависят многие региональные настройки -- прим.пер.),
используемой для категорий локали, которые не перекрыты 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
Тип терминала, для которого будет подготавливаться вывод.
Предпочитаемая пользователем утилита просмотра 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.