在POSIX shell中,命令的结果可以通过%>的形式来定义,其中%表示文件描述符:1为标准输出stdout、2为标准错误stderr。系统默认%值是1,也就是1>,而1>可以简写为>,也就是默认为>。
stdout和stderr的默认目标是终端,比如:
#xxxxx
-bash: xxxxx: command not found
错误信息显示在终端上,而对于telnet等就是虚拟终端。
(1)输出重定向到文件file,终端上只能看到标准错误:
#./run.sh >file
#./run.sh 1>file
#more file
aaa
bbb
ccc
(2)错误重定向到文件file,终端上只能看到标准输出:
#./run.sh 2>file
#more file
./run.sh: line 10: /root/t.sh: 没有那个文件或目录
(3)标准输出和标准错误都重定向到file,终端上看不到任何信息:
#./run.sh >file 2>&1 (等同于#./run.sh 1>a1 2>&1)
#more file
aaa
bbb
ccc
./run.sh: line 10: /root/t.sh: 没有那个文件或目录
其中&的意思,可以看成是“和...相同”的意思。本例中就是2>和1>一样,都输出到file中。
(4)一个特别的例子:
#./run.sh 2>&1 >file
可以解释为2>和1>一样,因为1>是系统默认输出到终端的,所以标准错误也输出到终端,而系统把标准输出重定向到文件file。
#more file
aaa
bbb
ccc
本文暂时没有评论,来添加一个吧(●'◡'●)