我的环境变量去哪儿了?

where did my environment variable go?

我正在尝试在 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"

我看到了正确的值..

我做错了什么?

使用命令行:

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

你是 运行 一个可能引用需要从父 export 编辑 shell 才能可见的环境变量的脚本。

另一方面:

sudo -E bash -c "echo $DOMAIN"

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

为了证明这一点,请尝试使用单引号 "working" 解决方案:

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"

并让您的脚本参考