linux环境变量不能生效问题


  在/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 ,以上问题可以解决




你可能感兴趣的:(Linux)