我正在尝试使用参数扩展取消引用环境变量的值$@
,但它似乎不起作用。
我需要调用带有某些参数的 shell 脚本。参数列表包含环境变量,并且环境变量应该出现在要执行 shell 脚本的位置。我事先不知道命令列表,所以我使用$@
. 但是,该脚本无法取消引用环境变量的值。
可以按如下方式完成解释我的问题的最小设置。
- Dockerfile
FROM alpine:3.10
ENV MY_VAR=production
WORKDIR /app
COPY run.sh .
ENTRYPOINT [ "sh", "run.sh" ]
- 运行.sh
#!/bin/sh
echo "Value of MY_VAR is" $MY_VAR
echo "Begin"
$@
echo "Done"
我可以使用docker build . -t env-test
. 当我使用 运行它时docker run env-test:latest 'echo $MY_VAR'
,我得到以下输出。
Value of MY_VAR is production
Begin
$MY_VAR
Done
虽然我期望的输出是:
Value of MY_VAR is production
Begin
production
Done
旁注:实际上,我正在尝试使用如下 compose 文件运行它:
version: '3'
services:
run:
image: env-test:latest
command: echo $$MY_VAR
但它再次给了我类似的结果。