>/dev/null 2>&1

作者: yanjusong | 来源:发表于2019-06-30 00:39 被阅读0次

在shell里面,通常>表示流重定向,默认的表示输出重定向。比如:

image.png
其中$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一个不存在的文件那么会有标准错误

image.png

相关文章

网友评论

    本文标题:>/dev/null 2>&1

    本文链接:https://www.haomeiwen.com/subject/nzpmcctx.html