重定向的问题

2016-10-11 20:55:29 +08:00
 likeunix
cmd >file 2>&1
cmd 2>&1 >file
这两条指令的执行结果为什么不一样,命令的细节是什么?
1786 次点击
所在节点    Linux
2 条回复
lxf1992521
2016-10-11 21:27:06 +08:00
等同于:

cmd 1>file 2>&1
cmd 2>&1 1>file
KDr2
2016-10-12 11:59:09 +08:00
- 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 里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX