Chapter 10 Environment
Local variable
subshell
当你在login shell
中执行一段程序文件时,会启动一个新的shell
来执行,即subshell
。
subshell
有自己独立的环境,所以无法获取在parent shell
中定义的局部变量,自然也无法改变其值
exported variable
通过使用export
命令,可以使subshell
获取parent shell
中的变量。
当变量被export
后则subshell
可以获取该变量的一个副本,在subshell
中所做的任何更改只存在其自己的环境中,
不会改变parent shell
中相应变量的值
被export
的变量在subshell
中会自动被export
,从而传递给更下一层的subshell
export -p
export -p
命令可以显示当前环境中所有被export
的变量及他们的值
PS1 and PS2
变量PS1
中保存了当前环境中表示command prompt
符号的值。你可以任意修改其值,但是修改只在当前环境有效
同样变量PS2
中保存了secondary command prompt
。
HOME
你登录时所在的目录路径会在启动login shell
时自动被保存在HOME
变量中。
同样你可以任意修改该变量的值,但是修改只在当前环境有效
PATH
当你执行一个程序时,shell
会在PATH
中保存的所有路径中按顺序依次寻在改程序,如果寻找到则运行程序
your current directory
当前目录也属于shell
环境,所以在subshell
中进行的修改并不会影响到parent shell
。其值一直保存在变量PWD
中
CDPATH
CDPATH
和PATH
类似,只不过它时在执行cd
命令时所查找的目录。
不同的是CDPATH
并不会在你启动shell
是被自动赋值,通常需要用户手动去赋值
more on subshell
.
命令
. file
.
会使其后所执行的命令使在当前shell
中进行的,而不会启动一个独立的subshell
。
在shell
中启动一个新shell
可以建立一个独立的shell
环境,在退出返回时新shell
中的各种局部变量都会自动消失
而且不像subshell
缺乏交互环境。使用ctrl + d
可以退出新shell
示例:
HOME=/usr2/data
BIN=$HOME/bin
RPTS=$HOME/rpts
DATA=$HOME/rawdata
PATH=$PATH$BIN
CDPATH=:$HOME:$RPTS
PS1="DB: "
export HOME BIN RPTS DATA PATH CDPATH PS1
# start up a new shell
/bin/sh
exec
命令
exec program
TBD
(...)
与{ ...; }
()
和{}
可以将其中的命令作为一组命令执行。不同的是()
中的命令是在subshell
中执行的,
{}
中的命令是在当前shell
中执行的
向subshell
中传递变量的其它方式
在运行程序的同一行定义的变量,会自动被export
x=100 foo
(x=100; export x; foo)
以上两条语句等价
.profile
文件
在启动shell
时系统会读取两个特殊文件,/etc/profile
和用户主目录下的.profile
你可以修改.profile
,在其中定义一些你自己独特的环境参数
TERM
TERM
变量表示你所使用的terminal
的配置,一些命令(vi
等)需要用到
TZ
TZ
表示Time Zone