您的位置:首页 > 其它

Solaris系统 sudo 执行脚本是无法传递环境变量

2010-06-28 21:57 295 查看
问题:

用sudo执行脚本,如

sudo $PATH/restoreFolder.sh

在restoreFolder.sh脚本中有一些环境变量,就为空值,或者没有这个变量了!

执行sudo这个命令的Shell无法将环境变量传递到restoreFolder.sh的执行环境中去。

解决方法:

(1)手动在脚本中设置所需的变量(那这样的话,这个“变量就不是变量”),或者在执行sudo前把所需要的变量写到restoreFolder.sh脚本中去。

(2)

sudo的环境变量的传递是由/etc/sudoers控制的,要传递什么环境变量,在该文件中加上如下语句即可,例如

Defaults envNeedKeeping += "Value"

(3)运行:visudo 命令或者打开 /usr/local/etc/sudoers

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"

---------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: