linux中./a.out > outfile 2>&1和./a.out 2> &1 >outfile重定问题的理解

来源:互联网 发布:aris软件流程 编辑:程序博客网 时间:2024/06/07 14:18

今天看到《unix环境高级编程》中的一个问题


官方的答案是

我看了答案还是不太理解,为什么第二个问题的答案说2指向了1,然后1又指向了outfile,为什么后面2没有指向outfile,而是指向了输出,后面我在网上查了一下,自己想了下终于明白了。

大家编程都学过A,B两个变量数值交换的方法(C=A,A=B,B=C),我们这里可以把1(stdout,标准输出),2(stderr,标准错误)看成是个变量,可以把这里的问题看成是变量赋值。

对于第一个问题./a.out > outfile说的是把输出(1)重定向到outfile(也就是1=outfile),然后再看2>&1,这里可以看成2=1,而这时1=outfile,所以这里标准输出和标准错误都指向outfile了。(首先 1>可以简写为>, 其次1代表stdout,输出为终端上;2代表stderr,我也觉得在终端上。在1前面加上&是为了表明&1是stdout,而不是文件名为1的文件;

对于第二个问题./a.out 2> &1,这里可以看成2=1,此时1指向标准输出,所以2也指向标准输出,后面>outfile,因为1>可以简写为>,所以这里是1指向了outfile,所以就是答案里说的描述符1指向outfile的文件表项,描述符2指向终端的文件表项。(这里2在1改变之前已经指向了1之前的值,不管1后面指向什么地方2都指向标准输出)

在网上找到了一篇文章(http://blog.chinaunix.net/uid-25909722-id-2912890.html)。


0 0
原创粉丝点击