ENVIRON - Linux手册页
Linux程序员手册 第7部分
更新日期: 2020-08-13
名称
environ-用户环境
语法
extern char **environ;
说明
变量environ指向一个称为" environment"的字符串指针数组。该数组中的最后一个指针的值为NULL。 (此变量必须在用户程序中声明,但如果定义了_GNU_SOURCE功能测试宏,则在头文件中声明。)启动进程的exec(3)调用使该字符串数组可用于进程。通过fork(2)创建子进程时,它将继承其父级环境的副本。
按照惯例,环境中的字符串的格式为"名称=值"。常见的例子有:
- USER
- 登录用户的名称(由某些BSD衍生程序使用)。
- LOGNAME
- 登录用户的名称(由某些System-V派生程序使用)。
- HOME
- 用户的登录目录,由密码文件passwd(5)中的login(1)设置。
- LANG
- 当未被LC_ALL或更具体的环境变量(例如LC_COLLATE,LC_CTYPE,LC_MESSAGES,LC_MONETARY,LC_NUMERIC和LC_TIME)覆盖时,用于语言环境类别的语言环境名称(有关LC_ *环境变量的更多详细信息,请参见locale(7))。 。
- PATH
- sh(1)和许多其他程序在搜索由不完整路径名已知的文件时应用的目录前缀序列。前缀以aq:aq分隔。 (类似地,某些shell使用CDPATH来查找更改目录命令的目标,而man(1)使用MANPATH来查找手册页,等等)
- PWD
- 当前工作目录。由一些贝壳设置。
- SHELL
- 用户的登录shell的路径名。
- TERM
- 要为其准备输出的终端类型。
- PAGER
- 用户的首选实用程序,用于显示文本文件。
- EDITOR/VISUAL
- 用户首选的实用程序来编辑文本文件。
名称可以通过sh(1)中的export命令或setenv命令(如果您使用csh(1))放置在Shell环境中。
Shell的初始环境以各种方式填充,例如/ etc / environment中的定义由pam_env(8)在登录时为所有用户处理的(在使用pam(8)的系统上)。另外,各种shell初始化脚本,例如系统范围内的/ etc / profile脚本和每用户初始化脚本,可能包括将变量添加到shell环境的命令;例如,有关详细信息,请参见首选外壳的手册页。
Bourne样式的shell支持以下语法
NAME =值命令
仅在执行命令的过程范围内创建环境变量定义。多个变量定义(由空格分隔)可以位于命令之前。
参数也可以放在环境中的exec(3)位置。 C程序可以使用函数getenv(3),putenv(3),setenv(3)和unsetenv(3)来操纵其环境。
请注意,许多程序和库例程的行为受某些环境变量的存在或值影响。示例包括以下内容:
- *
- 变量LANG,LANGUAGE,NLSPATH,LOCPATH,LC_ALL,LC_MESSAGES等会影响语言环境的处理;请参见catopen(3),gettext(3)和locale(7)。
- *
- TMPDIR影响tempnam(3)和其他例程创建的名称的路径前缀,以及sort(1)和其他程序使用的临时目录。
- *
- LD_LIBRARY_PATH,LD_PRELOAD和其他LD_ *变量影响动态加载器/链接器的行为。
- *
- POSIXLY_CORRECT使某些程序和库例程遵循POSIX的规定。
- *
- malloc(3)的行为受MALLOC_ *变量影响。
- *
- 变量HOSTALIASES给出了包含要与gethostbyname(3)一起使用的别名的文件名。
- *
- TZ和TZDIR给出tzset(3)以及ctime(3),localtime(3),mktime(3),strftime(3)之类的函数所使用的时区信息。另请参见tzselect(8)。
- *
- TERMCAP提供有关如何寻址给定终端的信息(或提供包含此类信息的文件的名称)。
- *
- COLUMNS和LINES告知应用程序窗口大小,可能会覆盖实际大小。
- *
- PRINTER或LPDEST可以指定要使用的打印机。参见lpr(1)。
备注
prctl(2)PR_SET_MM_ENV_START和PR_SET_MM_ENV_END操作可用于控制进程环境的位置。
BUGS
显然,这里存在安全风险。为IFS或LD_LIBRARY_PATH指定异常值的用户欺骗了许多系统命令。
还有名称空间污染的风险。诸如make和autoconf之类的程序可使用所有大写字母中类似命名的变量来覆盖环境中的默认实用程序名称。因此,人们使用CC选择所需的C编译器(以及类似的MAKE,AR,AS,FC,LD,LEX,RM,YACC等)。但是,在某些传统用法中,此类环境变量为程序提供选项而不是路径名。因此,一个具有MORE,LESS和GZIP。这种用法被认为是错误的,在新程序中应避免使用。 gzip的作者应考虑将其选项重命名为GZIP_OPT。
另外参见
bash(1),csh(1),env(1),login(1),printenv(1),sh(1),tcsh(1),execve(2),clearenv(3),exec(3), getenv(3),putenv(3),setenv(3),unsetenv(3),locale(7),ld.so(8),pam_env(8)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。