不懂就要问, shell 脚本进入容器,执行操作后并退出的疑问。

2020-11-14 19:56:16 +08:00
 liuguangxuan
#!/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

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

2026 次点击
所在节点    Linux
4 条回复
zhuisui
2020-11-14 20:20:04 +08:00
是 << EOF 的部分在容器外被执行了吗
codehz
2020-11-14 20:21:18 +08:00
你没发现 cat /inner.txt 是在 host 上跑的吗
heredoc 里$()也会被解析,
除非你用 << 'EOF'
xxx
EOF
这样的格式
adminpassword
2020-11-14 20:53:57 +08:00
可以在宿主机上创建好文件,然后 docker cp 到容器里
liuguangxuan
2020-11-14 21:13:08 +08:00
@zhuisui #1
@codehz #2
@adminpassword #3
明白原因了,是因为 EOF 没有加单引号,学习到了新知识,heredoc 。感谢各位老哥。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX