echo多行文字到文本

echo 多行文字到文本

这篇文章为了记录自己写Dockerfile时踩的坑,分三部分描述echo内容到文件的用法

  1. shell 脚本 echo 单行文字到文本
  2. shell 脚本 echo 多行文字到文本
  3. Dockerfile 中 echo 多行文字到文本

1. shell 脚本 echo 单行文字到文本

这个是 echo 最常用的用法

1
2
#!/bin/bash
echo "test测试" > a.txt

2. shell 脚本 echo 多行文字到文本

1
2
3
4
5
6
7
#!/bin/bash
cat >a.txt<<EOF # 开始
test测试
多行文本
重定向
到文件
EOF            # 结束

其中 EOF 表示自定义终止符,所以如果脚本写成下面这样,一样是可以使用的:

1
2
3
4
5
#!/bin/bash
cat >a.txt<<ABC # 开始
test测试
多行文本
ABC            # 结束

只不过我们正常不这么玩,这样显得太另类,也不便于多人协作时,每个人的理解。

3. Dockerfile 中 echo 多行文字到文本

Dockerfile的使用场景,是在build镜像时,需要更换ubuntu的镜像源为阿里云,这个时候就需要修改sources.list。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM ubuntu:18.04

RUN mv /etc/apt/sources.list /etc/apt/sources_bak.list \
   && echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\n\
\n\
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\n\
\n\
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\n\
\n\
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\n\
\n\
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse\n'\
> /etc/apt/sources.list

4. Reference

  1. EOF是什么?
  2. linux<<eof