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

问题:

用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"

---------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值