">/dev/null 2>&1" 和 "2>&1 >/dev/null"的区别

旧博客迁移文章,内容可能已失去价值,仅为留念,做了简单重新排版,勉强可看。

在查询如何给 Letsencrypt 证书配置 OCSP Stapling 时,看到一段自动更新脚本,里面有 2>&1 >/dev/null 这种用法,并不能理解,百度之,查到最多的还是 >/dev/null 2>&1 这种用法。还是 google 大法好!

要理解这两者的区别,我们要先理解清楚标准输入输出以及输出重定向的知识。

类型 设备 设备文件名 文件描述符
标准输入 键盘 /dev/stdin 0
标准输出 显示器 /dev/sdtout 1
标准错误输出 显示器 /dev/sdterr 2

对于前者,是最常见的使用,用于将正确和错误输出都输出到设备 /dev/null,也就是不输出到屏幕上。

>/dev/null 2>&1

其中 >/dev/null 相当于 1>/dev/null,那么上述写法可以改为

1>/dev/null 2>&1

首先 1>/dev/null标准输出重定向到 /dev/null,这时所有的正确输出都将输出到 /dev/null。然后 2>&1标准错误输出重定向到标准输出,而此时标准输出已经被重定向到 /dev/null,所以标准错误输出也将输出到 /dev/null

理解了上述内容,理解第二种用法,就简单许多了。

2>&1 >/dev/null

首先 2>&1标准错误输出重定向到标准输出,那么这时错误输出就会输出到屏幕上。然后 >/dev/null 则将标准输出重定向到 /dev/null,这时正确输出就不会显示到屏幕上。所以这种用法的作用就是将正确输出隐藏起来,只显示错误输出。

最后总结一下:

>/dev/null 2>&1 用来将正确输出和错误输出都重定向到空设备

2>&1 >/dev/null 用来将正确输出重定向到空设备,屏幕只显示错误输出。

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 3133 天前,文中所描述的信息可能已发生改变,请谨慎使用。

Comments