关于su user和su - user的区别
一般来讲,应用程序如果不特殊指定,一般会继承当前shell的环境变量,例如export LANG=zh_ch.UTF-8执行后,后续的程序会按照UTF-8的编解码字节流。
但为什么我的~/.profile里面明明有export LANG=zh_ch.UTF-8这一句,偏偏echo $LANG的时候,仍然是GBK的呢?
难道是.profile没有生效?
是的,的确是这样!
那为什么没生效呢?一般不都su 到当前应用直接就会生效.profile吗?
没错,不过,那要看你怎么su的了。
回归正题:
这就是本主题讨论的 《关于su user和su - user的区别》
su - root is the same as su - just like login as root,
then the shell is login shell,which mean it will expericene a login process,
usually .bash_profile and .bashrc will be sourced
su root is the same as su like you open an interactive shell in root name,
then only .bashrc will be sourced.
所以在个人账户(LANG=GBK)的情况下,去su ds_svcas还是会导致LANG=GBK,只有su - ds_svcas的时候,才LANG=UTF-8。
另外,如果把export LANG=zh_ch.UTF-8这句放到.bashrc下,为什么su ds_svcas也是可以生效成UTF-8的呢?
有兴趣的可以继续研究下, .bash_profile和.bashrc的区别,号称是交互式login的shell场景下,.bash_profile(.profile)是一定会执行的;而.bashrc是交互式 non-login的shell 场景下也会执行