Go to main content

手册页第 7 部分:标准、环境、宏、字符集和杂项

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

environ(7)

名称

environ - 用户环境

描述

当进程开始执行时,exec 函数系列中的一个函数将激活一个字符串数组,该字符串数组被称为环境;请参见 exec(2)。根据约定,这些字符串的形式为 variable=value。例如,PATH=/sbin:/usr/sbin。这些环境变量提供了使程序环境相关信息可用于程序的方法。

可以通过 sh(1) 中的 export 命令和 name=value 参数或某一个 exec 函数将名称放入环境中。某些 shell 变量(例如,MAILPS1PS2IFS)经常被 .profile 文件导出,与这些变量发生冲突是不可取的;请参见 profile(5)

以下环境变量可由应用程序使用,并且应在目标运行时环境中设置。

HOME

用户登录目录的名称,由 login(1) 通过口令文件设置;请参见 passwd(5)

LANG

用于指定国际化信息的字符串,通过国际化信息,用户可以使用不同的国家约定。setlocale( 3C) 函数检查 LANG 环境变量(当通过 "" 将它作为 locale 参数调用时)。如果特定类别的相应环境变量未设置或为 Null,LANG 将作为缺省语言环境使用。如果 LC_ALL 设置为有效的非空值,将使用其内容覆盖 LANG 和其他 LC_* 变量。例如,在以 setlocale(LC_CTYPE, "") 形式调用时,setlocale() 将首先查询 LC_CTYPE 环境变量来查看它是否已设置并且不为 Null。如果 LC_CTYPE 未设置或者为 Null,则 setlocale() 将检查 LANG 环境变量来查看它是否已设置并且不为 Null。如果 LANG 和 LC_CTYPE 均未设置或为 NULL,将使用缺省的 "C" 语言环境来设置 LC_CTYPE 类别。

大部分命令都会在执行任何其他处理之前调用 setlocale(LC_ALL, "")。这样,通过设置相应的环境变量,可以将命令与不同的国家约定一起使用。

以下环境变量对应于 setlocale(3C) 的每个类别:

LC_ALL

如果设置为有效的非空字符串值,将覆盖 LANG 以及所有其他 LC_* 变量的值。

LC_COLLATE

此类别指定所使用字符排序规则序列。此类别对应的信息存储在 localedef(1) 命令创建的数据库中。此环境变量影响 strcoll(3C)strxfrm(3C)

LC_CTYPE

此类别指定字符分类、字符转换以及多字节字符的宽度。当 LC_CTYPE 设置为有效值时,调用实用程序可以显示并处理包含下列字符的文本和文件名:该语言环境的有效字符;扩展 Unix 编码 (Extended Unix Code, EUC) 字符,其中任何单个字符的宽度可以为 1、2 或 3 个字节;以及 1、2 或 3 个列宽的 EUC 字符。缺省 "C" 语言环境对应于 7 位 ASCII 字符集;只有 ISO 8859-1 字符有效。此类别对应的信息存储在 localedef() 命令创建的数据库中。此环境变量由 ctype(3C)mblen(3C) 以及许多其他命令(例如,cat (1)ed(1)ls(1)vi(1))使用。

LC_MESSAGES

此类别指定所使用消息数据库的语言。例如,应用程序的一个消息数据库可能包含法语消息,而另一个数据库可能包含德语消息。消息数据库由 mkmsgs(1) 命令创建。此环境变量由 exstr(1)gettxt(1)gettxt(3C) 以及 gettext(3C) 使用。

LC_MONETARY

此类别指定用于特定语言环境的货币符号和分隔符。此类别对应的信息存储在 localedef(1) 命令创建的数据库中。此环境变量由 localeconv(3C) 使用。

LC_NUMERIC

此类别指定小数点分隔符和千分位分隔符。此类别对应的信息存储在 localedef() 命令创建的数据库中。在缺省的 C 语言环境中,使用 "." 作为小数点分隔符,不使用千分位分隔符。此环境变量由 localeconv(3C)printf(3C) 以及 strtod(3C) 使用。

LC_TIME

此类别指定日期和时间格式。此类别对应的信息存储在 localedef() 指定的数据库中。在缺省的 C 语言环境中,使用美国的日期和时间格式。此环境变量由许多命令和函数使用。例如:at(1)calendar(1)date(1)strftime(3C) 以及 getdate(3C)

MSGVERB

控制在向 stderr 显示消息时 fmtmsg 选择哪些标准格式消息组件;请参见 fmtmsg (1)fmtmsg(3C)

NETPATH

冒号分隔的网络标识符列表。网络标识符是系统的网络选择组件使用的字符串,用于提供应用程序特定的缺省网络搜索路径。网络标识符必须由非 Null 字符构成且长度至少为 1。不指定最大长度。网络标识符通常由系统管理员选择。网络标识符还是任意 /etc/netconfig 文件条目中的第一个字段。因此,NETPATH 提供了指向 /etc/netconfig 文件的链接以及有关该网络条目中包含的网络的信息。/etc/netconfig 由系统管理员维护。getnetpath(3C) 中介绍的库例程可以访问 NETPATH 环境变量。

NLSPATH

包含模板序列,当 catopen(3C)gettext(3C) 尝试定位消息目录时将使用这些模板。每个模板都由一个可选前缀、一个或多个替换字段、一个文件名以及一个可选后缀组成。例如:

NLSPATH="/system/nlslib/%N.cat"

定义 catopen() 应搜索目录 /system/nlslib 中的所有消息目录,其中目录名由传递到 catopen( ) 的 name 参数(即 %N)以及 .cat 后缀构成。

替换字段包含一个 % 符号,后面跟一个单字母关键字。当前定义了下列关键字:

%N

传递到 catopen()name 参数的值。

%L

LANG 或 LC_MESSAGES 的值。

%l

LANG 或 LC_MESSAGES 中的语言元素。

%t

LANG 或 LC_MESSAGES 中的地区元素。

%c

LANG 或 LC_MESSAGES 中的代码集元素。

%%

单个 % 字符。

如果指定的值当前未定义,将替换为空字符串。分隔符 "_" 和 "." 不包含在 %t%c 替换中。

NLSPATH 中定义的模板由冒号 (:) 分隔。前导冒号或两个相邻的冒号 (::) 相当于指定 %N。例如:

NLSPATH=":%N.cat:/nlslib/%L/%N.cat"

指示 catopen() 应搜索 namename.cat/nlslib/$LANG/name.cat 中的请求的消息目录。对于 gettext()%N 将自动映射到 messages

如果 NLSPATH 未设置或为 NULL,catopen()gettext() 将调用 setlocale(3C),后者将检查 LANG 和 LC_* 变量以定位消息目录。

Oracle Solaris 中对 %L 的扩展解释包括对已接受语言环境名称别名的支持,如 gettext(1)、gettext(3C)catopen(3C)setlocale(3C)locale_alias(7) 中所述。

LANGLC_MESSAGES 环境变量的元素使用 catopen() 函数进行描述。有关更多信息,请参见 catopen(3C) 手册页。

NLSPATH 通常在系统范围内设置(在 /etc/profile 中),这样可以使与消息目录相关的位置和命名约定对程序和用户都是透明的。

PATH

sh(1)time(1)nice(1)nohup(1) 和其他实用程序在按不完整的路径名搜索文件时应用的目录前缀序列。前缀由冒号 (:) 分隔。login (1) 用于设置 PATH=/usr/bin。有关详细信息,请参见 sh(1)

SEV_LEVEL

定义严重性级别,并且在标准格式错误消息中将字符串与严重性级别相关联并输出其字符串;请参见 addseverity(3C)fmtmsg(1) 以及 fmtmsg(3C)

TERM

要为其准备输出的终端的种类。此信息由可能利用该终端的特殊功能的命令(例如 vi(1))使用。

TZ

时区信息。此环境变量的内容由函数 ctime(3C)localtime(3C)strftime(3C) 以及 mktime(3C) 用来覆盖缺省时区。TZ 值为以下两种格式(为清晰可见,插入了空格)之一:

:characters

std offset dst offset, rule

如果 TZ 属于第一种格式(即如果第一个字符为冒号 (:))或者 TZ 不属于第二种格式,则 TZ 将指定时区数据库文件的路径(相对于 /usr/share/lib/zoneinfo/),如果存在前导冒号,将忽略它。

否则,如果 TZ 属于第二种格式,其扩展形式如下:

stdoffset[dst[offset][,start[/time],end[/time]]]
stddst

指示作为标准 (std) 时区或备用(dst,例如夏时制)时区指定的字符串,不少于三个字节且不超过 {TZNAME_MAX}。只有 std 是必需的;如果缺少 dst,则在此时区中不应用备用时间。其中每个字段都以两种格式之一出现,即括起或不括起:

  • 在括起的格式中,第一个字符是小于号 ('<') 字符,最后一个字符是大于号 ('>') 字符。两个尖括号字符之间的所有字符都是当前语言环境的可移植字符集中的字母数字字符、加号 ('+') 字符或减号 ('-') 字符。这种情况下,stddst 字段不包含尖括号字符。

  • 在不括起的格式中,这些字段中的所有字符都是当前语言环境的可移植字符集中的字母字符。

如果任意字段的长度小于三个字节(缺少 dst 的情况除外)、大于 {TZNAME_MAX} 个字节或者包含指定字符之外的其他字符,则这些字段的解释是未明确指定的。

offset

指示本地时间与世界标准时间之间的差值。此时差的格式如下:

hh[:mm[:ss]]

分钟 (mm) 和秒 (ss) 是可选的。小时 (hh) 是必需的,可以是一位数。offset(放在 std 后面)是必需的。如果 offset 未出现在 dst 后面,将假定夏时制时间比标准时间早一小时。可以使用一位数或多位数。此值始终解释为十进制数字。小时必须介于 0 到 24 之间,如果出现分钟(和秒),分钟(和秒)必须介于 0 到 59 之间。如果值超出范围,可能会导致不可预测的行为。如果开头带有 -,表示时区在本初子午线的东侧。否则,时区位于本初子午线的西侧(通过开头的 "+" 符号表示,该符号是可选的)。

start/time, end/time

指示何时进行夏时制切换,其中,start/time 说明何时从标准时间更改为夏时制时间,而 end/time 说明何时从夏时制时间更改回标准时间。每个 time 字段都用本地时间说明发生更改的时间。

startend 为以下格式之一:

Jn

儒略日 n (1 ≤ n ≤ 365)。不计算闰日。也就是说,在所有年份中,2 月 28 日是第 59 日,3 月 1 日是第 60 日。无法表示特殊的 2 月 29 日。

n

从零开始计算的儒略日 (0 ≤ n ≤ 365)。计算闰日,而且可以表示 2 月 29 日。

Mm.n.d

年度的第 m 月的第 n 周 (1 ≤ n ≤ 5, 1 ≤ m ≤ 12) 第 d 日 (0 ≤ d ≤ 6),其中,第 5 周表示“第 m 月中的最后 d 日”,它可能出现在第四周或第五周。第 1 周是第 d 日后的第一周。第零日是周日。

实现特定的缺省值用于 startend(如果未指定这些可选字段)。

time 的格式与 offset 相同,但前者不允许使用前导符号("–" 或 "+")。如果未指定 time,缺省值为 02:00:00。

另请参见

cat(1)date(1)ed(1)fmtmsg(1)localedef(1)login(1)ls(1)mkmsgs(1)nice(1)nohup(1)sh(1)sort(1)time(1)vi(1)、exec(2)addseverity(3C)catopen(3C)ctime(3C)ctype(3C)fmtmsg(3C)getdate(3C)getnetpath(3C)gettext(3C)gettxt(3C)localeconv(3C)mblen(3C)mktime(3C)printf(3C)setlocale(3C)strcoll(3C)strftime(3C)strtod(3C)strxfrm(3C)netconfig(5)passwd(5)profile(5)locale_alias(7)

警告

强烈建议不要在 shell 参数 PATH 中使用 null 路径名或 dot (.)。