2016 - 2024

感恩一路有你

在Shell中理解/dev/null 2 > 1命令

浏览量:3780 时间:2024-05-26 12:12:10 作者:采采

在编写Shell脚本时,经常会遇到`/dev/null 2 > 1`这样的命令。这条命令的作用是将标准输出和错误输出都重定向到/dev/null中,即将所有生成的信息丢弃。接下来我们详细解释一下`command > file 2 > file`与`command > file 2 > 1`之间的区别。

`command > file 2 > file`的工作原理

首先,`command > file 2 > file`表示将命令产生的标准输出信息和错误输出信息都发送到file文件中。使用这种写法时,stdout和stderr都直接发送到file中,导致file被打开两次,stdout和stderr会互相覆盖,实际上使用了FD1和FD2两个管道同时去占用file。

`command > file 2 > 1`的效果及优势

而`command > file 2 > 1`这条命令则直接将stdout发送到file,然后stderr继承了FD1管道后再被发送到file,这样file只被打开一次,也只使用一个管道FD1,包含了stdout和stderr的内容。从IO效率上看,前一条命令的效率要低于后一条命令,因此在编写Shell脚本时,我们更倾向于使用`command > file 2 > 1`这样的写法。

深入分析shell中的`> /dev/null 2 > 1`命令

在Shell中,经常会遇到类似`> /dev/null 2 > 1`这样的命令,通过`>`符号来定义输出分解组合。具体来说,“> /dev/null 2 > 1”可以分为五部分:

1. `>`代表重定向到哪里,例如:`echo "123" > /home/123.txt`

2. `/dev/null`代表空设备文件

3. `2 > 1`表示标准错误

4. ``表示等同于的意思,`2 > 1`表示2的输出重定向等同于1

5. `1`表示标准输出,默认值是1,因此`> /dev/null`等同于`1 > /dev/null`

因此,`> /dev/null 2 > 1`也可以写成`1 > /dev/null 2 > 1`。这条命令的执行过程如下:

- `1 > /dev/null`表示标准输出重定向到空设备文件,即不输出任何信息到终端,不显示任何信息

- `2 > 1`表示标准错误输出重定向到标准输出,因为之前标准输出已经被重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

通过以上分析,我们更加深入地理解了`> /dev/null 2 > 1`这个Shell命令在实际应用中的作用和效果。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。