关于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 场景下也会执行

posted @ 2017-11-24 10:38  lianye920129  阅读(1013)  评论(0编辑  收藏  举报