shell 可维护包含一组变量的环境,这些变量由 login 程序、系统初始化文件和用户初始化文件定义。另外,某些变量是在缺省情况下定义的。
Shell 可以有两种类型的变量:
环境变量-导出到由 shell 产生的所有进程的变量。可以使用 env 命令查看这些变量的设置。环境变量的子集(如 PATH)影响 shell 本身的行为。
Shell(局部)变量-仅影响当前 shell 的变量。在 C shell 中,一组 shell(局部)变量与相应的一组环境变量具有特殊关系。这些 shell 变量包括 user、term、home 和 path。相应环境变量的值最初用来设置 shell 变量。
在 C shell 中,使用小写名称和 set 命令来设置 shell 变量。使用大写名称和 setenv 命令来设置环境变量。如果设置 shell 变量,shell 会设置相应的环境变量。同样,如果设置环境变量,相应的 shell 变量也会更新。例如,如果使用一个新路径更新 path shell 变量,shell 也会用这个新路径更新 PATH 环境变量。
在 Bourne shellKorn shell 中,可以使用等于某个值的大写变量名称来设置 shell 变量和环境变量。同时也可使用 export 命令为后续要执行的任何命令激活这些变量。
对于所有的 shell,通常按变量的大写名称引用 shell 变量和环境变量。
在用户初始化文件中,可以通过更改预定义变量的值或指定其他变量来自定义用户的 shell 环境。下表显示如何在用户初始化文件中设置环境变量。
表 4–19 在用户初始化文件中设置环境变量
Shell 类型 |
添加到用户初始化文件中的行 |
---|---|
setenv MAIL /var/mail/ripley |
|
Bourne shell 或 Korn shell |
VARIABLE=value; export VARIABLE 示例: MAIL=/var/mail/ripley;export MAIL |
下表介绍了可能需要在用户初始化文件中自定义的环境变量和 shell 变量。有关不同 shell 所使用的变量的更多信息,请参见 sh(1)、ksh(1) 或 csh(1) 手册页。
表 4–20 Shell 变量和环境变量的说明
变量 |
说明 |
---|---|
设置由 cd 命令使用的变量。如果将 cd 命令的目标目录指定为相对路径名,cd 命令将首先在当前目录 (.) 中查找目标目录。如果没有找到目标目录,将继续搜索列在 CDPATH 变量中的路径名,直到找到目标目录并完成目录切换。如果没有找到目标目录,则当前的工作目录保持不变。例如,CDPATH 变量设置为 /home/jean,/home/jean 下面有两个目录:bin 和 rje。如果当前的目录是 /home/jean/bin 目录,那么,当您键入 cd rje 时,即使您未指定全路径名,目录也将切换到 /home/jean/rje。 |
|
为 C shell 设置历史记录。 |
|
设置用户起始目录的路径。 |
|
设置语言环境 (locale)。 |
|
定义当前登录用户的名称。登录程序会将 LOGNAME 的缺省值自动设置为在 passwd 文件中指定的用户名。您不应当重置此变量,而只应当引用此变量。 |
|
设置用户的缺省打印机。 |
|
设置用户邮箱的路径。 |
|
设置可用手册页的分层结构。 |
|
按顺序指定多个目录,当用户键入命令时,shell 将在这些目录搜索要运行的程序。如果该目录不在搜索路径中,用户必须键入命令的完整路径名。 在登录过程中,系统会自动定义缺省的 PATH,并将其设置为在 .profile(Bourne 或 Korn shell)或 .cshrc (C shell) 中指定的路径。 搜索路径的顺序至关重要。如果不同位置中存在相同的命令,将使用首先找到的具有该名称的命令。例如,假设在 Bourne shell 和 Korn shell 语法中将 PATH 定义为 PATH=/bin:/usr/bin:/usr/sbin:$HOME/bin,/usr/bin 和 /home/jean/bin 中均有名为 sample 的文件。如果用户键入 sample 命令而未指定其全路径名,则将使用在 /usr/bin 中找到的版本。 |
|
为 C shell 定义 shell 提示符。 |
|
为 Bourne shell 或 Korn shell 定义 shell 提示符。 |
|
设置由 make、vi 和其他工具使用的缺省 shell。 |
|
指定存储备用 terminfo 数据库的目录。可使用 /etc/profile 或 /etc/.login 文件中的 TERMINFO 变量。有关更多信息,请参见 terminfo(4) 手册页。 如果设置了 TERMINFO 环境变量,系统将首先检查由用户定义的 TERMINFO 路径。如果系统在用户定义的 TERMINFO 目录中找不到终端的定义,它将在缺省目录 (/usr/share/lib/terminfo) 中搜索终端的定义。如果系统在这两个位置均未找到终端的定义,则将终端标识为“哑终端”。 |
|
定义终端。此变量应当在 /etc/profile 或 /etc/.login 文件中重置。当用户调用编辑器时,系统将查找在该环境变量中定义的同名文件。系统将搜索 TERMINFO 所引用的目录以确定终端的特征。 |
|
设置时区。例如,时区可用于在 ls -l 命令中显示日期。如果没有在用户的环境中设置 TZ,将使用系统设置。否则,将使用格林威治标准时间。 |