我有一个执行以下操作的 shell 脚本,我想在 Dockerfile 中执行此操作。有谁知道如何做到这一点?我能够执行sed
命令,但在 for 循环方面运气不佳。
org="$(cat org-template.yml)"
for i in {1..10}
do
temp=$org
temp="${temp/ENDPOINT/$endpoint}"
temp="${temp/AUTH_TOKEN/$access_token}"
temp="${temp/LABEL_TOKEN/$i}"
final_template="${final_template}\n${temp}"
done
final_template="${final_template//
/\\n}"
sed "s#ORGANIZATIONREQUESTS#${final_template}#g" ./performance-tests.yml > /tmp//performance-tests.yml
答案1
此类问题的通常解决方案是将 shell 脚本与 Dockerfile 放在一起,并使用指令COPY
将其复制到容器中,然后RUN
将其复制到容器中。
唯一的替代方案是将整个脚本作为正确转义的参数传递给bash -c
,而这读起来会很糟糕;无论如何,您也需要保留org-template.yml
在容器中。因此,老实说,将这两个文件复制到容器中似乎是最简单且最好维护的解决方案。
另外,嗯,这就是 YAML:我建议您使用适当的 yaml 工具来处理 YAML,而不是使用 shell 替换和sed
;公用事业yq
公司将是一个更安全的赌注,以后不会受到伤害。