EOF-EOF 区别

If the redirection operator is <<-, then all leading tab characters are stripped from input lines and the line containing delimiter.
如果重定向的操作符是 <<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。

cat 的用法

覆盖

这里有两种格式可以使用

格式一

1
2
3
4
5
6
7
#!/bin/bash
cat << EOF > /root/test.txt
Hello!
My site is www.361way.com
My site is www.91it.org
Test for cat and EOF!
EOF

格式二

1
2
3
4
5
6
7
#!/bin/bash
cat > /root/test.txt <<EOF
Hello!
My site is www.361way.com
My site is www.91it.org
Test for cat and EOF!
EOF

两种写法区别无法是要写入的文件放在中间或最后的问题,至于选哪种看个人喜好吧。

追加

覆盖的写法基本和追加一样,不同的是单重定向号变成双重定向号。

格式一

1
2
3
4
5
6
7
#!/bin/bash
cat << EOF >> /root/test.txt
Hello!
My site is www.361way.com
My site is www.91it.org
Test for cat and EOF!
EOF

格式二

1
2
3
4
5
6
7
#!/bin/bash
cat >> /root/test.txt <<EOF
Hello!
My site is www.361way.com
My site is www.91it.org
Test for cat and EOF!
EOF

需要注意的是,不论是覆盖还是追加,在涉及到变量操作时是需要进行转义的,例如:

1
2
3
4
5
6
7
8
9
#!/bin/bash
cat <<EOF >> /root/a.txt
PATH=\$PATH:\$HOME/bin
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/10.2.0/db_1
export ORACLE_SID=yqpt
export PATH=\$PATH:\$ORACLE_HOME/bin
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
EOF

语法

tee 的用法

tee 命令相当于管道的一个 T 型接头。tee 命令从标准输入读取并同时写入标准输出和一个或多个文件

1
2
3
4
5
STDOUT
|
<---- STDIN
|
tee 命令行所指定的文件名

使用举例

写入到一个文件

1
echo "this is a line" | tee file.txt

追加

1
echo "this is a line" | tee -a file.txt

写入到多个文件

1
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt

取消标准输出

1
echo "this is a another line"  | tee -a file.txt >/dev/null

配合 sudo 使用

tee 命令的另一个优点是,您可以将其与 sudo 结合使用,并写入其他用户拥有的文件。要将文本追加到您没有写权限的文件中,请在 tee 之前添加 sudo:

配合 EOF 使用

不追加数据:
1
2
3
4
5
6
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4pwh0wn5.mirror.aliyuncs.com"]
}

EOF
追加数据:
1
2
3
4
5
tee >> test <<-'EOF'
{
  "registry-mirrors": ["https://4pwh0wn5.mirror.aliyuncs.com"]
}
EOF

参数

1
2
3
4
-a 或 --append  附加到既有文件的后面,而非覆盖它.
-i 或 --ignore-interrupts  忽略中断信号。
--help  在线帮助。
--version  显示版本信息。