在shell中经常看到下面这样的cat和eof的搭配使用的例子:
cat > workers.txt << EOF {{ work01_hostname }} {{ work01_ip }} {{ work01_hostname }} {{ work01_ip }} EOF cat > generate-kubelet-certificate.sh << EOF IFS=$' ' for line in `cat workers.txt`; do instance=`echo $line | awk '{print $1}'` INTERNAL_IP=`echo $line | awk '{print $2}'` EOF
今天来学习下这种用法:
cat > 文件名 << EOF 1 2 3 EOF
解释如下:
首先必须要说明的是EOF在这里没有特殊的含义,你可以使用FOE或OOO等(当然也不限制在三个字符或大写字符)。
1. cat<<EOF,表示以EOF输入字符为标准输入结束
[root@sql ~]# cat << eof > 123 > 345 > 456 > eof 123 345 456
[root@sql ~]# cat << ooo > 123 > 1231 > 123123 > ooo 123 1231 123123 [root@sql ~]#
2. cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束
[root@sql ~]# cat > 1.txt 123 123 123 123 [root@sql ~]# cat 1.txt 123 123 123 123 [root@sql ~]#
3. cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样
[root@sql ~]# cat > 1.txt << eof > 123 > 123 > 123 > 444 > eof [root@sql ~]# cat 1.txt 123 123 123 444 [root@sql ~]#