Linux-cmd >file 2>&1″是什么意思

Linux-cmd >file 2>&1″是什么意思

夜无邪 发布于 2017-10-20 字数 709 浏览 1105 回复 1

Finally, I want to give you a example to end this entry(Try to understand it ^_^):

The output of a.out is the following, without the 'STDXXX: ' prefix.

STDERR: stderr output
STDOUT: more regular

./a.out 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'
more regular
stderr output

First save stdout as &3 (&1 is duped into 3).
Next send stdout to stderr (&2 is duped into 1).
Send stderr to &3 (stdout) (&3 is duped into 2).
close &3 (&- is duped into 3)

在这个示例中看不懂这句的意思 ./a.out 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2017-10-24 1 楼

3>&1 创建一个新的FD3,保存当前stdout的文件描述符,
1>&2 将stdout重定向到stderr
2>&3 将stderr重定向到stdout
3>&- 关闭之前创建的FD3

整体的作用是交换了stdout和stderr的内容,FD3相当于一个变量。

BTW:这种花哨的用法,实际工作中很少用到,还是把精力focus在基础的东西上吧。

关于bash shell编程更详细的信息,可以参考ABS http://www.tldp.org/LDP/abs/html/