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

时间:2012-04-11 00:42:02

标签: bash shell environment-variables sudo

我正在从脚本A调用bash脚本B.在脚本A(父脚本)中,我正在导出一些变量。我想在脚本B(下标)中使用这些变量,但是变量值没有从脚本A传递到脚本B.有没有办法从脚本B访问变量值?

#!/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

3 个答案:

答案 0 :(得分:9)

正如@geekosa所提到的,sudo出于安全原因重置了环境。 为了保护环境,请将-E切换为sudo

来自sudo联机帮助页:

  

-E

     

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

答案 1 :(得分:3)

这里的问题不在于shell脚本,而是出于安全原因sudo清理它传递给它运行的程序的环境。有关详细信息,请参阅man sudoers;有关系统保留的环境变量(如果有),请参阅系统/etc/sudoers

答案 2 :(得分:0)

如果您出于安全或简单的原因只想保留一组特定的变量(而不是所有变量),您只需将它们作为sudo命令的一部分进行分配:

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