在/etc/profile中添加环境变量时,遇到了一点问题,在此记录。
以下下操作大概复现了所出的问题。
1. 普通用户登录系统,切换到root,在/etc/profile中添加环境变量MYENV=abc
2. 直接打印环境变量,#echo $MYENV,输出为空
3. 执行#source /etc/profile后,打印#echo$MYENV,输出abc
4. 打开新的终端,此时为普通用户,打印环境变量#echo $MYENV,结果为空
5. 重启系统,普通用户登录,打开终端,#echo $MYENV依然为空
6. 使用普通用户登录,su - think ,$echo $MYENV,输出abc
7. 写一个脚本,其中有echo $MYENV。执行这个脚本,这条输出为空
8. 切换到root,,$su - ,打印MYENV可得到abc,但是执行脚本,依然输出为空
很奇怪,明明可以打印出环境变量,但是脚本却不能正确执行。这里提一些上述操作涉及到的一些东西。
su只是切换了身份,但是环境变量依然为原用户的环境变量。使用su - 可以将环境变量也改变。
在图形界面环境下,打开终端是nonlogin-shell,在shell下进入shell子进程也是nonlogin-shell。使用tty1-tty6控制终端或者使用ssh为终端远程登录,使用的是login-shell。
login-shell在登录时,会读取/etc/profile的全局配置,和~/.bash_profile或者~/.bash_login或者~/.profile的个人配置。nonlogin-shell 只读取~/.bashrc。
问题的原因就在于执行脚本是用的nonlogin-shell。
20171022
在/etc/profile 中添加环境变量,并使用exort ,以上问题可以解决