让我们将>> /dev/null 2>&1
语句分为几部分:
第1部分: >>
输出重定向
这用于重定向程序输出,并将输出附加在文件末尾。更多...
第2部分: /dev/null
特殊文件
这是一个伪设备专用文件。
命令ls -l /dev/null
将为您提供此文件的详细信息:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
你观察到了crw
吗?这意味着它是伪设备文件,是字符特殊文件类型,可提供串行访问。
/dev/null
接受并丢弃所有输入;不产生任何输出(总是在读取时返回文件结束指示)。参考:维基百科
第3部分: 2>&1
文件描述符
每当您执行程序时,无论何时打开文件,操作系统都会始终打开三个文件,即标准输入,标准输出和标准错误,操作系统(来自内核)会返回一个称为文件描述符的非负整数。这些文件的文件描述符分别为0、1和2。
所以,2>&1
简单地说,标准错误重定向到标准输出。
&
表示后面的内容是文件描述符,而不是文件名。
简而言之,通过使用此命令,您可以告诉程序在执行时不要大喊大叫。
使用的重要性是2>&1
什么?
如果您不希望产生任何输出,即使终端中发生某些错误也是如此。为了更清楚地解释,让我们考虑以下示例:
$ ls -l > /dev/null
对于上述命令,终端中没有输出任何输出,但是如果此命令产生错误该怎么办:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
尽管我将输出重定向到/dev/null
,但仍将其打印在终端中。这是因为我们没有将错误输出重定向到/dev/null
,因此为了也重定向错误输出,需要添加2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
。