这篇文章来简单地说明一下这两种写法的区别
dir > outfile 2>&1
和dir 2>&1 > outfile
,前者不会有任何输出,而后者会把错误信息输出来,因为在linux
中,重定向其实是调用了dup
函数,对文件描述符进行了复制,而2>&1
就是将文件描述符2
重定向到文件描述符1
所指向的文件
对于dir > outfile 2>&1
,文件描述符1
首先指向了outfile
,然后2>&1
使得文件描述符2
也指向了文件描述符1
所指向的文件
而对于dir 2>&1 > outfile
,文件描述符2
首先指向了文件描述符1
所指向的文件,也就是标准输出,然后> outfile
使得文件描述符1
指向了outfile
文件,而此时文件描述符2
(标准错误)依然指向终端,因此错误信息就会被显示到屏幕上,而正常的输出则会被重定向至outfile
文件中