介绍
如果你想同时丢弃标准输出和标准错误输出,>/dev/null 2>&1
写的对。我写错了2>&1 >/dev/null
,没有用,但是我不太明白,所以我仔细研究了符号。
必备知识
首先关于数字。这些数字是分配给输入/输出接口的标识号,称为文件描述符。各如下
标准输入(stdin):0
标准输出(stdout):1
标准错误输出(stderr):2
接下来,关于>符号。>后面指定一个路径称为重定向,可以>将后面命令的执行结果的输出目的地设置为任意路径。/dev/null
是当您想丢弃它而不将其写入任何文件或在重定向时将其显示在屏幕上时指定的特殊路径。/dev/null
文件不存在。
最后,关于&的符号。如果将它放在文件描述符的前面&,则表示“当前为文件描述符指定的接口设置的输出目标”。例如,&1
将表示输出目标设置为标准输出(1)。
例如,command 2>&1
您可以通过如下指定将标准错误输出(2)的输出目标设置为标准输出(1)的输出目标。
详细分析
错误情形
command 2>&1 >/dev/null
首先
- 2→stderr
- 1→stdout
2>&1
之后
- 2→stdout
- 1→stdout
>/dev/null
之后
- 2→stdout
- 1→/dev/null
正确情形
command >/dev/null 2>&1
首先
- 2→stderr
- 1→stdout
>/dev/null
之后
- 2→stderr
- 1→/dev/null
2>&1
之后
- 2→/dev/null
- 1→/dev/null