在shell里面,通常>
表示流重定向,默认的表示输出重定向。比如:
其中
$Date >out.txt
和$Date 1>out.txt
一样,原因是?其实上面也说了默认表示输出重定向。
我们经常看到这样的小脚本$command >/dev/null 2>&1
,这句话的意思是把command
执行的标准输出和标准错误都发送到/dev/null
这个空洞文件,/dev/null
是类Linux上的一个特殊的文件,所有传给他的数据都会丢掉,你也无法从这个文件读取到任何数据。脚本这样的写法应该是作者觉得不需要输出,只需要执行command
就可以。
我们来一步一步解析$command >/dev/null 2>&1
,首先>/dev/null
就是把command
所执行的标准输出重定向到/dev/null
这个设备中,然后2>&1
的意思是啥呢?先了解一点知识,在类Linux系统中标准输入、标准输出和标准错误分别对应的文件描述符是0、1和2,所以2>&1
的意思就是把标准错误(2)重定向到标准输出(1),所以command
执行的标准输出和标准错误都会重定向到/dev/null
。
可能很多人会有疑问2>&1
有点奇怪,为何多了个&
?能不能写成2>1
呢?回答是不行,因为2>1
是把标准错误输出到1
这个文件(普通文件), 我们来实践学习一下,ll
一个不存在的文件那么会有标准错误。
网友评论