Linux环境变量-深挖

238 阅读1分钟

1.环境变量配置文件

Linux中shell包含两种模式登录模式(LOGIN SHELL)与非登录模式(NON LOGIN SHELL)。这两种模式中对应获取配置文件的逻辑是不相同的。

a. 登录模式SHELL是一个用登录成功登录启动的,使用了/usr/login, 读取了/usr/passwd文件,登录模式SHELL是该用户进程下的第一个进程,针对bash可以通过echo $0如果输出-bash就说明当情是登录模式shell。

可以通过su - | su -l | su USERNAME - 等操作创建一个登录模式shell。

在登录模式shell下加载环境变量的顺序如下。

/etc/profile #由登录进程调用加载
/etc/profile.d/ #由/etc/profile调用加载
~/.bash_profile #由登录进程调用加载
~/.bashrc #由~/.bash_profile调用加载
/etc/bashrc #由~/.bashrc调用加载

b.非登录模式SHELL启动通过一个程序并且没有登录。针对bash可以通过echo $0如果输出bash就说明当情是非登录模式shell。

可以通过su | 图形终端 | 执行脚本等操作创建一个非登录模式shell。

在非登录模式SHELL下加载顺序。

~/.bashrc #由非登录SHELL进程调用加载
/etc/bashrc #由~/.bashrc调用加载
/etc/profile.d/ #由/etc/bashrc调用加载

2. 脚本中设置的环境变量生效范围。由于在脚本中export环境变量相当于是在子进程中定义了一个环境变量,然而这个环境变量只在子继承中生效,不会影响父进程。需要使用. *.sh或者source *.sh这样会使脚本在当前进程中执行,这样如果在脚本中定义的环境变量就影响的当前进程了。