我已在/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 export
ing 变量的 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 运行其命令之前获取该变量指向的文件。