我的环境变量去了哪里?

时间:2016-04-16 12:51:15

标签: bash sudo

我正在尝试在bash脚本中使用环境变量,该脚本需要sudosource一起运行。

我有以下文件(my_file.sh)

 echo "this is DOMAIN = $DOMAIN"

我的会话中有DOMAIN环境变量..

现在我需要运行

  sudo -E bash -c "source ./my_file.sh"

但输出不显示$DOMAIN的值。相反,它是空的。

如果我将命令更改为

  sudo -E bash -c "echo $DOMAIN"

我看到了正确的值..

我做错了什么?

1 个答案:

答案 0 :(得分:3)

使用命令行:

sudo -E bash -c "source ./my_file.sh"

您正在运行一个脚本,该脚本可能引用需要从父shell export显示的环境变量。

另一方面:

sudo -E bash -c "echo $DOMAIN"

扩展父shell 中$DOMAIN 的值,而不是sudo行内的值。

为了证明这一点,请尝试你的工作"单引号解决方案:

sudo -E bash -c 'echo $DOMAIN'

要做好准备,请尝试导出变量:

export DOMAIN
sudo -E bash -c "source ./my_file.sh"

或者,在命令行上传递$ DOMAIN:

sudo -E bash -c "source ./my_file.sh $DOMAIN"

让您的脚本引用$1