Cat命令结合重定向功能实现文本内容写入
原文链接:https://blog.csdn.net/networken/article/details/80564824
将stdin标准输入的内容重定向到test.txt文件(若此文件不存在,则创建),且当stdin中含有EOF时完成写入;
cat 追加内容用 >>,覆盖内容用 > ;
其中EOF可以替换为任意字符串。
写入内容到文本,覆盖文本原有内容
cat > /root/test.txt << EOF
this is first line
this is second line
this is thrid line
EOF
追加内容到文本,保留文本原有内容
cat >> /root/test.txt << EOF
this is fourth line
this is fifth line
EOF
脚本中的变量问题
文本中的$TAG变量会被直接赋值,对第一个EOF加引号即可避免
TAG=8.0
cat > /root/run_mysql.sh << "EOF"
#!/bin/bash
docker run -it -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
mysql:$TAG
EOF
文本内容中的缩进
如果文本存在缩进格式,使用tab制表符缩进无法保留其缩进格式,如果希望保留缩进格式,需要使用空格缩进
cat > /root/test.txt << EOF
linegroup1
this is first line
this is second line
linegroup2
this is thrid line
this is fourth line
EOF
空格缩进执行结果
# cat test.txt
linegroup1
this is first line
this is second line
linegroup2
this is thrid line
this is fourth line
tab缩进执行结果
# cat test.txt
linegroup1
this is first line
this is second line
linegroup2
this is thrid line
this is fourth line
第二个EOF前含有制表符
如果在脚本中使用cat EOF并且存在如下缩进格式,可以看到第二个EOF前含有缩进:
cat test.sh
#!/bin/bash
if true;
then
cat > /root/test.txt <<- EOF
this is first line
this is second line
this is thrid line
EOF
fi
缩进存在两种情况:tab制表符缩进和空格缩进,这种缩进会导致制表符或空格被判定为结尾符,而非EOF,针对制表符缩进将第一个EOF改为<<- EOF格式即可解决。
man bash中的说明:
# man bash | grep "<<-"
If the redirection operator is <<-, then all leading tab characters are stripped from input lines and the line containing delimiter. This allows
但是针对空格缩进该方法并不能解决问题,第二个EOF前如果为空格缩进必须修改为制表符缩进。
查看文本缩进格式,“^I”表示制表符,“$”表示换行符
:set list
:set list TAB
直接将EOF输出传递给命令
# Create multiple YAML objects from stdin
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000"
EOF
————————————————
版权声明:本文为CSDN博主「willblog」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/networken/article/details/80564824
网友评论