我正在创建一个需要创建特定 bash 脚本的 Docker 容器。我在我的 Dockerfile 中使用以下 RUN 语句:
RUN printf "#!/bin/bash\n \
# This is a bash comment inside the script\
ls -l" > /home/myuser/script.sh
它运行良好,但生成的脚本只是:
#!/bin/bash
ls -l
因此,最终文件中缺少 bash 注释。我怀疑原因是 Docker 假定该行是 Dockerfile 注释,但由于它包含在双引号内,我认为很明显事实并非如此。
当然,我可以通过将完整的脚本包含在一行中或将其放在外部文件中来解决这个问题,但我认为应该可以在多行引用字符串中包含 bash 注释,而无需这种问题。任何解决方法?我尝试了各种转义,但都没有成功。
最佳答案
没错,Docker 将其解释为 Dockerfile 注释而不是字符串中的注释有点奇怪。作为解决方法,我得到以下工作
FROM ubuntu:latest
RUN printf "#!/bin/bash \
\n# This is a bash comment inside the script \
\nls -l\n" > /script.sh
RUN cat /script.sh
此输出的结果
Step 3 : RUN cat /script.sh
---> Running in afc19e228656
#!/bin/bash
# This is a bash comment inside the script
ls -l
如果将 \n
移动到注释行的开头,它仍会生成正确的输出,但不再将该行视为 Dockerfile 注释行。
假设我找到了 right command parsing code ,我没看错,Docker 在尝试解析该行以查看它是否有任何命令之前删除了注释。
关于bash - 从 Dockerfile 删除注释创建 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107199/