IO重定向改变标准输出的位置:分为输出重定向输出重定向


1.覆盖重定向 >

>:将目标文件内的源内容覆盖掉。执行不存在的文件,既可以创建新文件。


范例:

# cat 1.txt

11111111111111111111

22222222222222222222


# echo -e  "aaaaaaaaaaaaa\nbbbbbbbbbbbbb" > 1.txt

# cat 1.txt

aaaaaaaaaaaaa

bbbbbbbbbbbbb



2.追加重定向 >>

>>:在原文件内容后面追加新内容。


范例:

# cat 1.txt

11111111111111111111

22222222222222222222


# echo -e "11111111111111111111\n22222222222222222222" >> 1.txt

# cat 1.txt

11111111111111111111

22222222222222222222

11111111111111111111

22222222222222222222



3.拒绝覆盖重定向 set -C

执行命令:set -C 之后,再执行覆盖重定向到已有文件,就会报错。执行追加重定向没有影响。执行命令:set +C即可取消。


范例:

覆盖失败

# cat 1.txt

11111111111111111111

22222222222222222222


# set -C

# echo -e "11111111111111111111\n22222222222222222222" > 1.txt  

-bash: 1.txt: cannot overwrite existing file

追加成功。


# echo -e "11111111111111111111\n22222222222222222222" >> 1.txt

# cat 1.txt

11111111111111111111

22222222222222222222

11111111111111111111

22222222222222222222


取消set

# set +C

# echo "aaaaaaa" > 1.txt

# cat 1.txt

aaaaaaa



4.错误重定向 2> 2>>

2>:错误覆盖重定向。

2>>:错误追加重定向。

如果命令执行错误,会有错误信息,错误重定向可以把错误信息,重定向到其他文件中。


范例:

# cat 3 1.txt

cat: 3: 没有那个文件或目录

aaaaaaa

# cat 3 1.txt 2> 2.txt

aaaaaaa

# cat 2.txt

cat: 3: 没有那个文件或目录



5.标准和错误输出到不同的位置

不管执行的正确与错误,都不想在屏幕上显示内容,可以把标准和错误输出到不同的文件中去。


范例:

错误重定向到 2文件。标准重定向到 2.txt文件,适用于前面 1到4章符号。

# cat 1 1.txt  

cat: 1: 没有那个文件或目录

aaaaaaa


# cat 1 1.txt 2>2 >2.txt  

# cat 2 2.txt          

cat: 1: 没有那个文件或目录

aaaaaaa



6.标准和错误输出到一个位置

其实在脚本运行中,不需要提示标准输出和错误输出,只需要执行命令返回值 $? 即可。把这些数据量放到"黑洞"里 /dev/nell 中,如果想保留就指定一个文件。

&>:合并覆盖重定向   >  加上 2>  等于  &>

&>>:合并追加重定向   >>  加上 2>>  等于  &>>

cmd  > file  2>&1:合并覆盖重定向

cmd  >> file  2>&1:合并追加重定向

意思就是错误输出和标准输出一样的意思。


范例1:

# cat 2 2.txt &>3

# cat 3

cat: 1: 没有那个文件或目录

aaaaaaa


# cat 2 2.txt &>>3

# cat 3

cat: 1: 没有那个文件或目录

aaaaaaa

cat: 1: 没有那个文件或目录

aaaaaaa


范例2:

# cat 2 2.txt >3 2>&1

# cat 3

cat: 1: 没有那个文件或目录

aaaaaaa


# cat 2 2.txt >>3 2>&1

# cat 3

cat: 1: 没有那个文件或目录

aaaaaaa

cat: 1: 没有那个文件或目录

aaaaaaa



7.输入重定向

<:把数据流递交给前面的命令处理。


文件内容:

# cat 1.txt

hello


cat范例1:

# cat < 1.txt

hello


tr范例2:

# tr [he] [HE] < 1.txt

HEllo



8.here document的用法 <<

here document:是一种特殊的重定向方式,他将关键字中间的内容作为参数,传递给命令。

cat  << EOF

> xxxxxx

> xxxxxx

> EOF

关键字EOF是可被替换的。

一定要顶格写,前面不可以有空格。

关键字不会输出。

cat  << EOF >file.txt

> xxxxxx

> xxxxxx

> EOF

会把关键字之间的内容写到file.txt文件中,常用于脚本里面创建文件。


范例1:

因为第一个关键字EOF前面有一个空格。

# cat << EOF

> hello

> HELLO

>  EOF

> EOF

hello

HELLO

EOF


范例2:

# cat << EEE >1.txt

> hello

> HELLO

> EEE

# cat 1.txt

hello

HELLO