技术解析

不懂就要问, shell 脚本进入容器,执行操作后并退出的疑问。
0
1975-02-23 17:11:39
idczone
#!/bin/bash
docker exec -i ubuntu-lgx bash << EOF

echo "test file" >> /inner.txt
ls -l /inner.txt
content=$(cat /inner.txt)
echo ${conent}                                                             

EOF

我想在宿主机用脚本进入 docker 的容器内,然后创建了一个文件,并 cat 出来文件的内容,赋给一个变量,然后离开容器。

但是执行的时候却提示,找不到此文件。用ls查看文件确实是存在的。

运行结果:

cat: /inner.txt: No such file or directory
-rw-r--r--. 1 root root 58 Nov 14 11:51 /inner.txt

请问各位老哥,这种写法哪里有什么不妥吗?


是 << EOF 的部分在容器外被执行了吗

你没发现 cat /inner.txt 是在 host 上跑的吗
heredoc 里$()也会被解析,
除非你用 << 'EOF'
xxx
EOF
这样的格式

可以在宿主机上创建好文件,然后 docker cp 到容器里




明白原因了,是因为 EOF 没有加单引号,学习到了新知识,heredoc 。感谢各位老哥。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服