linux环境变量
在bash shell种,环境变量用于存储有关shell会话和工作环境的信息。环境变量分为两类:
- 全局变量
- 局部变量
全局变量对于shell会话和所有生成的子shell都是可见的。局部变量只对创建他们的shell可见。
查看全局变量,可以使用env或printenv命令。
使用set命令,可以查看所有的环境变量,包括局部变量、全局变量以及用户定义变量。用户定义变量也分局部环境变量和全局环境变量。
设置局部用户定义变量
按照bash shell的惯例,所有的环境变量名均使用大写字母,因此用户定义局部变量时要坚持使用小写字母。
var_name=var_value
局部环境变量,只能在当前shell中使用,在子shell中不可用。如果在子进程中设置了局部变量,一旦退出了子进程,该局部变量就不可用。
设置全局环境变量
如果在当前进程中设置了全局环境变量,那么在当前shell创建的子shell中,该变量都是可用的。创建全局环境变量的方法是:
var_name=var_value
export var_name
修改子shell中全局环境变量,并不会影响父shell中该变量的值。
在子shell中甚至无法使用export命令改变父shell中全局环境变量的值,也无法用unset删除全局环境变量。
shell启动的方式
- 作为默认登录shell
- 作为非登录shell的交互式shell
- 作为运行脚本的非交互式shell
登录shell
启动文件执行的顺序:
- /etc/profile 定义一些环境变量(PATH/USER/HOSTNAME/HISTSIZE等)
读取/etc/profile.d/*.sh(颜色、语言、执行别名等) - ~/.bash_profile、~/.bash_login、~/.profile(依次只读取其中一个)
- ~/.bash_profile会调用~/.bashrc(如果存在),~/.bashrc会调用/etc/bashrc(如果存在)
可以用source指令加载脚本的变更
交互式shell:
不需要登录即可运行的shell,如su和原bash下的新bash动作
~/.bashrc、/etc/bashrc
非交互式shell
系统执行shell脚本时用的是这种shell。为了在运行脚本时运行一些特定启动的命令,bash shell提供了BASH_ENV环境变量,它会检查这个环境变量来查看要执行的启动文件。
有些shell脚本是通过启动一个子shel来执行的,子shell可以继承父shell导出过的变量。
环境变量持久化
如果想持久化全局环境变量,最好在/etc/profile.d目录中创建一个以.sh结尾的文件,将新增或修改过的全局环境变量放置在这个文件中。
在大多数发行版中,用~/.bashrc文件存储个人用户永久性bash shell变量。