EOF(end of file),表示自定义终止符,EOF是不固定的,可以随意设置别名,
在linux按ctrl+d 就代表EOF。
ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
注:在shell中,ctrl+d表示退出当前shell.
ctrl+c是强制中断程序的执行,进程已经终止。
ctrl+z的是将任务中止(暂停的意思),但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行。(当你vi一个文件是,如果需要用shell执行别的操作,但是你又不打算关闭vi,因为你得存盘推出。你可以简单的按下ctrl+z,shell会将vi进程挂起~,当你结束了那个shell操作之后,你可以用fg命令继续vi你的文件。)
EOF一般会配合cat能够多行文本输出。
<:输入重定向
>:输出重定向
>>:输出重定向,进行追加,不会覆盖之前内容
<<:标准输入来自命令行的一对分隔号的中间内容(e.g. <<EOF)
e.g.1
cat <<EOF
> hello
> EOF
hello
我们知道cat的操作对象是文件,但是例1中cat的操作对象不是文件,而是用户输入;那么我们可以这样理解例1:先在文件file中输入“hello”,再用cat file输出其中的内容。
“ << EOF EOF ”的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。
e.g.2
cat <<EOF > 1.txt #向文件1.txt输入覆盖内容(>)(也可以:cat > 1.txt <<EOF)
#输出重定向到1.txt 即1被覆盖
> 123
> 456
> 678
> 66a
> EOF
cat 1.txt
123
456
678
66a
如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。
而<<-就是为了解决这一问题:
cat <<-EOF
>Hello,world!
> EOF
上面的写法,虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。
这就是<<和<<-的区别。