转自书籍《跟老男孩学linux运维:shell编程实战》
环境变量初始化与文件对应的生效顺序
在登录Linux系统并启动一个bash shell时,默认情况下bash会在若干个文件中查找环境变量的设置。这些文件统称为系统环境文件。bash检查的环境变量文件的情况取决于系统运行的shell方式。系统运行shell方式一般为3中:
- 通过系统用户登录默认运行的shell
- 非登录交互式运行shell
- 执行脚本运行非交互式shell
当用户登录linux时,shell会作为登录shell启动。此时的登录shell加载环境变量的顺序如图所示
用户登录系统后首先会加载/etc/profile
全局环境变量文件,这是Linux系统上默认的shell主环境变量文件。系统上每个用户登录后都会加载这个文件。
当加载完/etc/profile
文件后,才会执行/etc/profile.d
目录下的脚本文件,这个目录下脚本有很多。
之后开始运行$HOME/.bash_profile
(用户环境变量文件),在这个文件中,又会去找$HOME/.bashrc
(用户环境变量文件),如果有,则执行 ,如果没有,则不执行。在$HOME/.bashrc
文件中又会去找/etc/bashrc
(全局环境变量文件),如果有,则执行 ,如果没有,则不执行。
如果用户的shell不是登录时启动的(比如手动敲下bash时启动或者其他不需要输入密码的登录以及远程ssh链接情况),那么这种非登录shell只会加载$HOME/.bashrc
(用户环境配置文件),并会去找/etc/bashrc
(全局环境变量文件)。因此如果希望在非登录shell下也可读到设置的环境变量等内容,就需要将变量设定等写入$HOME/.bashrc
或者/etc/bashrc
,而不是$HOME/.bash_profile
或者/etc/profile
。