我想在 Docker 容器中使用
env
变量。Makefile
。我写了一个
Makefile
用于在 CICD 管道中重用代码。生成文件
execute:
@echo $(COMMAND)
docker exec -it my-dev-container $(COMMAND)
Makefile 结果为空
$ make execute COMMAND="bash -c 'echo $VARIABLE_ONLY_EXIST_IN_CONTAINER'"
bash -c echo
<< EMPTY >>
Makefile 的预期结果:
$ make execute COMMAND="bash -c 'echo $VARIABLE_ONLY_EXIST_IN_CONTAINER'"
I_AM_A_VARIABLE_VALUE_WITHIN_THE_CONTAINER
无需Makefile即可工作:
docker exec -it my-dev-container bash -c 'echo $VARIABLE_ONLY_EXIST_IN_CONTAINER'
I_AM_A_VARIABLE_VALUE_WITHIN_THE_CONTAINER
有什么想法如何正确转义字符串吗?
Make 变量是简单的字符串,Make 没有任何方法来转义多单词字符串,以便可以安全地传递到 shell 上下文。为了使其像您所展示的那样工作,您需要在主机 shell 中转义字符串,以便 Make 接收运行子命令所需的字符串。
在您的设置中,您需要
COMMAND
才能获得该值
bash -c 'echo $V'
其中单引号和美元符号是字符串的一部分。当您输入
make
时,您需要在主机上引用此内容(尤其是美元符号):
make execute COMMAND="bash -c 'echo \$V'"
您在这里似乎没有使用 Make 作为构建系统,并且您显示的片段并不建议依赖于任何其他构建规则。仅运行您所展示的
docker exec
命令(或者更好的是,独立的 docker run
命令),或者使用一些其他技术(例如包装器工具的 shell 脚本)可能会更简单。