首先2 > &1等价于dup2(1,2);执行之后也就是2共享1的文件表。
1,command > file 2 >&1
等价于:
首先command > file 2 >&1,等价于command 1>file 2 > &1
具体例如:a.out 1 > a.txt 2>&1
open(a.txt) == 3;
dup2(3,1);关闭1,将3指向的内容复制到1一份,即就是1目前的里面指向的内容也指向了3,也就是重定向了1到3,即就是
重定向了标准输出(1)到文件描述符3(a.txt).
注:建议去看一下dup2函数的功能以及大概了解下unix是如何进行文件管理的。
dup2(1,2);关闭2,将1指向的内容复制到2一份。
2,command 2>&1 >file 等价于 a.out 2>&1 1>a.txt
dup2(1,2);
open(a.txt) == 3;
dup2(3,1);
下面是转的一段话:
平时经常混淆这两个写法,一段时间不用就忘记了,写个简单的blog记一下:
cmd>file 2>&1:
1)cmd>file: stdout-->file,stdout重定向到file,将标准输出信息写入到file文件;
2)2>&1: 1表示stdout,2表示stderr,stderr重定向到stdout,由于之前已经将stdout已经重定向到file,所以stderr信息也会写入到file;
该命令把stdout,stderr都写入到file。
cmd 2>&1 >file:
1)2>&1: stderr-->stdout,stderr重定向到stdout,将错误信息写入到stdout中;
2)>file : 这里>file相当于 cmd>file,也就是stdout>file,将stdout重定向到file;
该命令只是把stdout重定向到file,并没有把stderr信息写入到file。
---------------------
原文链接:https://blog.youkuaiyun.com/LIFEXX/article/details/50405346