重定向的问题
- 0次
- 2021-07-02 21:58:16
- idczone
cmd >file 2>&1
cmd 2>&1 >file
这两条指令的执行结果为什么不一样,命令的细节是什么?
等同于:
cmd 1>file 2>&1
cmd 2>&1 1>file
- cmd
stdout -> 终端
stderr -> 终端
- cmd >file 2>&1
先把 stdout(就是 1) dup 到打开的 file 上,这时 stdout(1) 指向 file: stdout -> file
然后把 stderr(2) dup 到 1 上,因为 1 已经是 file ,所以两个都去了 file : stderr -> stdout 即 stderr -> file
- cmd 2>&1 >file
先把 stderr(2) dup 到 stdout 上, stderr -> stdout 即 stderr-> 终端
再把 stdout(1) dup 到 file 上, stdout-> file
结果是, stderr 去了原来的 stdout (终端), stdout 去了 file 里