将动态 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
我注意到 $VERSION
在 sed
命令中没有被正确替换。我在这里错过了什么?我尝试了一些不同的方法(例如 "$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
我正在开发一个 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
我注意到 $VERSION
在 sed
命令中没有被正确替换。我在这里错过了什么?我尝试了一些不同的方法(例如 "$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