您的位置:首页 > 运维架构 > Shell

shell中2>&1之类的命令

2016-08-03 12:03 288 查看
放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符,内置的文件描述符如下

1 => stdout
2 => stderr
0 => stdin


换言之 2>1 代表将stderr重定向到当前路径下文件名为1的regular file中,而2>&1代表将stderr重定向到文件描述符为1的文件(即/dev/stdout)中,这个文件就是stdout在file system中的映射

而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同,都等价于

>file 2>&1


此处&>或者>&视作整体,分开没有单独的含义

第二个问题:

find /etc -name .bashrc > list 2>&1
# 我想问为什么不能调下顺序,比如这样
find /etc -name .bashrc 2>&1 > list
这个是从左到右有顺序的


第一种

xxx > list 2>&1


先将要输出到stdout的内容重定向到文件,此时文件list就是这个程序的stdout,再将stderr重定向到stdout,也就是文件list

第二种

xxx 2>&1 > list


先将要输出到stderr的内容重定向到stdout,此时会产生一个stdout的拷贝,作为程序的stderr,而程序原本要输出到stdout的内容,依然是对接在stdout原身上的,因此第二步重定向stdout,对stdout的拷贝不产生任何影响

http://www.gnu.org/software/bash/manual/bashref.html#Redirections

https://segmentfault.com/q/1010000002454596
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: