为什么“导出”在 docker exec 中不起作用?

为什么“导出”在 docker exec 中不起作用?

我已在/etc/profile.d/custom.sh和中导出变量~/.bashrc。当我运行时,它们在环境中可用docker exec -i CONT_ID /bin/bash。但是当我运行另一个命令时,它们在命令的环境中不可用。是的,所以我尝试这样做:

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

这是行不通的。我什至尝试:

docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123; echo Y=$Y"
docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123 && echo Y=$Y"

但它们也不起作用。我可以添加-e VARi=VALi,但它们位于带有 as exporting 变量的 shell 脚本文件中,那么有什么方法可以使用/bin/bash( source /etc/profile.d/custom.sh) 进行工作吗?

答案1

$MYVAR在命令中

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

将在执行之前展开/bin/bash -c(因为它在双引号中)。

相反,使用单引号:

docker exec -i "$MYCONTNAME" /bin/bash -c 'source /etc/profile.d/custom.sh; echo $MYVAR'

或者(未经测试),

docker exec -i "$MYCONTNAME" /usr/bin/env BASH_ENV=/etc/profile.d/custom.sh /bin/bash -c 'echo $MYVAR'

如果BASH_ENV在启动非交互式 shell 时设置(例如bash -c),则将在 shell 运行其命令之前获取该变量指向的文件。

相关内容