我需要运行一堆脚本(使用sudo),它们使用单个file.sh作为所有的配置文件。最初我将file.sh放在/etc/profile.d中,当我以root身份运行脚本时一切正常(因为当我连接到机器时,它首先获取file.sh和该文件中的所有vars可用)但是现在,出于安全原因,我需要与另一个具有sudo权限的用户运行它们。
使用sudo运行"配置文件"在/etc/profile.d中,即使我是root用户并且做了sudo,它也不会获得来源 - 它是相同的。
使用" sudo -E"不是一种选择,也是这种解决方案"默认值env_keep + =" ftp_proxy http_proxy https_proxy no_proxy""对我来说不起作用,因为文件中的变量发生了很大变化,并且在一个位置(例如/etc/profile.d/)中将所有变量抛出一个文件更容易 - 而不是向/添加选项等/ sudoers中。
稍后编辑(工作):
将原始sudo命令移至sudo.orig。创建了一个新的sudo bash脚本
[root@NS1 bin]# cat sudo
#!/bin/bash
source /etc/profile.d/set_env_vmdeploy.sh
sh /usr/bin/sudo.orig "$@"
并赋予其权限
[root@NS1 bin]# chmod 4111 sudo
[root@NS1 bin]# ll sudo*
---s--x--x 1 root root 78 May 7 13:42 sudo
---s--x--x 1 root root 123832 Jul 31 2014 sudo.orig
答案 0 :(得分:2)
如果希望sudo
执行子shell中的所有配置文件脚本,可以告诉它将shell作为登录shell调用:sudo -i /usr/local/bin/my_script.sh
。 (请注意,子shell将以工作目录设置为/root
开头,并且这可能会产生其他意外的副作用。)
或者,使用命令参数显式调用bash:sudo /bin/bash -c "source ./config.sh; ./real_script.sh"
。