关于2>&1重定向的详细解释

在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 



链接:http://toutiao.com/a6280391676880273665/


你可能感兴趣的:(关于2>&1重定向的详细解释)