我正在尝试在bash脚本中使用环境变量,该脚本需要sudo
与source
一起运行。
我有以下文件(my_file.sh)
echo "this is DOMAIN = $DOMAIN"
我的会话中有DOMAIN
环境变量..
现在我需要运行
sudo -E bash -c "source ./my_file.sh"
但输出不显示$DOMAIN
的值。相反,它是空的。
如果我将命令更改为
sudo -E bash -c "echo $DOMAIN"
我看到了正确的值..
我做错了什么?答案 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
。