标签:重定向
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
标签:重定向
原文地址:http://blog.51cto.com/11060853/2105811