what’s the meaning of “>/dev/null 2>&1”

在一些Shell脚本中,特别是Crontab的脚本中,经常会看到 >/dev/null 2>&1这样的写法

  1. >/dev/null
    >(右尖括号) 在unix/linux shell 中表示 输入到 的意思,就是把”>”左边的内容输入到”>”右边。

比如:echo text>1.txt 就把“text”这个文本输入到1.txt这个文件中。
/dev/null 代表一个空设备,即不存在的设备。也就是抛弃”>”左边的内容,不进行输出

  1. 2>&1
    三个部分组成:2, >&, 1 在/usr/include/unistd.h
/* Standard file descriptors.  */
#define STDIN_FILENO    0   /* Standard input.  */
#define STDOUT_FILENO   1   /* Standard output.  */
#define STDERR_FILENO   2   /* Standard error output.  */

这是三种不同的流
2代表stderr.
1代表sdtout.
而 &> 则表示把符号左边的内容以符号右边的形式输出。
2&>1 就是把,把stderr做为stdout输出。

2&>1定义了把stderr做为标准的stdout流输出,然后stdout的内容全部写入/dev/null,也就是被舍弃掉。
结论就是无论执行的是什么命令,哪怕运行中出现了error都不会有回显。