通过sudo - 环境变量从另一个shell脚本调用shell脚本?

问题描述:

我从脚本A调用bash脚本B.在脚本A(父脚本)中,我导出了一些变量。我想在脚本B(下标)中使用这些变量,但变量值没有从脚本A传递到脚本B.是否有方法从脚本B访问变量值?通过sudo - 环境变量从另一个shell脚本调用shell脚本?

#!/bin/bash 
# script_A.sh 
export VAR="value" 
enter code here 
sudo -u user ./script_B.sh 

#!/bin/bash 
# script_B.sh 
echo $VAR # this prints nothing 

正如@geekosaur所述,sudo出于安全原因重置环境。 为保护环境通-E切换到sudo

sudo手册页:

-E

-E(保护环境)选项指示用户希望保留他们现有的 环境变量的安全策略。如果指定了-E选项并且用户没有 许可权来保留环境,则安全策略可能会返回错误。

这里的问题是不是与shell脚本,但出于安全原因sudo进行消毒它传递给它运行程序的环境。有关详细信息,请参见man sudoers,系统上将为/etc/sudoers指定它将保留的环境变量(如果有)。

+0

geekosaur是对的。将-E文件添加到sudo命令将保留环境并将其传递给下标。 – user1325378 2012-04-11 00:54:30

如果你想只保留一组特定的变量(而不是全部)出于安全或简单的原因,你可以简单地指定它们作为sudo命令的一部分:

$ cat test.sh 
#!/usr/bin/env bash 
echo "$foo" 
$ unset foo 
$ foo=bar ./test.sh 
bar 
$ sudo foo=bar ./test.sh 
bar