2011年(4)
分类: LINUX
2011-05-08 20:08:11
之前就听说过sudo的时候执行命令的环境变量和本来的user有所不同,由于一直没有本身体会过这个问题所以就一直没有研究过这个东西.
最近用svn的时候由于没有将working copy放在本身用户有写权限的目录,这样用sudo svn co和sudo svn up之类的都能够正常执行,当用sudo svn ci的时候就出了问题了.提示没有设定环境变量SVN_EDITOR.
这个好解决
sudo vim /etc/profile.d/svn.sh
export SVN_EDITOR=vim
然后
source /etc/profile
这样就有了SVN_EDITOR的环境变量了吧...
在执行sudo svn ci
继续报没有设置SVN_EDITOR,开始还困惑了一下,结果马上就想到了之前听说的sudo的环境变量和当前用户的不一样,
然后尝试
sudo export SVN_EDITOR=vim
sudo svn ci
继续失败
sudo export SVN_EDITOR=vim
sudo echo $SVN_EDITOR
得到正确的变量vim
这时候就困惑了....这个sudo之后的环境变量到底是怎么一回事呢...
搬出google大师...得到结果
----------------------------------------------------------------------------------
centos 5 的 sudo 默认将原有的环境变量 reset,只保留一些对安全没有影响设定。
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY"
但是在用于开发的机器上,有时候这个安全设定不是那么方便,可以通过 visudo 修改配置为保留原有的环境变量
Defaults !env_reset
#Defaults env_reset
#Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
# LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
# LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
# LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
# LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
# _XKB_CHARSET XAUTHORITY"
---------------------------------------------------------------------------------
得出答案,解决问题