将动态 sed 回显到 Dockerfile 中的文件

Echo dynamic sed to file inside Dockerfile

我正在开发一个 Dockerfile,我想在其中根据输入参数变量动态创建一个 sed 表达式,并将该表达式写入一个文件。

这是 Dockerfile 的一部分:

FROM ubuntu
ARG VERSION

RUN echo $VERSION > /usr/local/testfile

RUN echo '#!/bin/sh \n\
sed -i "s/\"version\"/${VERSION}/g" file' > /usr/local/foo.sh

图像构建良好。 当我从该图像启动容器并检查文件时:

# cat /usr/local/testfile
0.0.1

# cat /usr/local/foo.sh
#!/bin/sh
sed -i "s/\"version\"/${VERSION}/g" file

我注意到 $VERSIONsed 命令中没有被正确替换。我在这里错过了什么?我尝试了一些不同的方法(例如 "$VERSION"),但其中 none 有效。

我最终分解了命令。我通过使用字符串连接为 sed 命令创建了一个变量,然后我 echo 将其单独编辑到文件中:

FROM ubuntu
ARG VERSION

ENV command="sed -i s/\"version\"/""$VERSION""/g"

RUN echo '#!/bin/sh' > /usr/local/foo.sh
RUN echo $command >> usr/local/foo.sh

# cat /usr/local/foo.sh
#!/bin/sh
sed -i s/"version"/0.0.1/g