我正在尝试将以下字符串打印到文件中:
"hellow world $xHbbbbbbbb"
我可以通过两种选择来做到这一点:
printf "hellow world \$xHbbbbbbbb\n" > /myfile1
echo "hellow world \$xHbbbbbbbb\n" > /myfile2
在终端上工作正常。
当我像这样用Dockerfile构建它时:
cat > Deleteme <<EOF
FROM alpine:latest
RUN printf "hellow world \$xHbbbbbbbb\n" > /myfile1
RUN echo "hellow world \$xHbbbbbbbb\n" > /myfile2
EOF
docker build -t deleteme -f Deleteme .
docker run --rm -it deleteme sh -c "cat /myfile1 && cat /myfile2"
输出为:
hellow world
hellow world \n
为什么RUN
命令省略了$xHbbbbbbbb
?
我之所以这样想,是因为$
将其标识为变量,但是它在终端上对我有用,所以我不明白为什么它也不能在Dockerfile上工作。
如何将以下字符串写入文件:
"hellow world $xHbbbbbbbb"
答案 0 :(得分:1)
在Dockerfile中,$xHbbbbbbbb
的确计算为环境变量
(有关用法和示例,请参见Docker Documentation | Environment replacement。
要获得理想的结果,您需要同时退出\
和$
。
另外,在echo
中,\n
不会被解释为换行符,除非指定了-e
选项,但是您似乎可以忽略它(请参见echo man page更多)。
将它们放在一起:
cat > Deleteme <<EOF
FROM alpine:latest
RUN printf "hellow world \\\$xHbbbbbbbb\n" > /myfile1
RUN echo "hellow world \\\$xHbbbbbbbb" > /myfile2
EOF
具有以下Deleteme
文件的结果:
FROM alpine:latest
RUN printf "hellow world \$xHbbbbbbbb\n" > /myfile1
RUN echo "hellow world \$xHbbbbbbbb" > /myfile2
和docker
输出:
hellow world $xHbbbbbbbb
hellow world $xHbbbbbbbb