>/dev/null 与 2>&1 作用与区别

发布时间 2023-11-08 08:11:47作者: 香吧香

转载请注明出处:  

  在 Linux 中,>/dev/null 和 2>&1 是两个常用的重定向操作,它们用于控制命令的输出和错误信息。

  /dev/null 是 Linux 系统中的一个特殊文件,它是一个无处不在的数据黑洞。任何写入 /dev/null 的数据都会消失,不会有任何数据被保存下来。因此,command >/dev/null 会将 command 的标准输出重定向到 /dev/null,也就是丢弃标准输出。例如:

echo "Hello, World!" >/dev/null

  在这个命令中,echo "Hello, World!" 的输出 "Hello, World!" 会被重定向到 /dev/null,因此你不会在终端看到这个输出。

  2>&1 是一个重定向操作,它将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1)。因此,command 2>&1 会将 command 的标准错误和标准输出合并,也就是将标准错误输出到标准输出。例如:

ls /path/to/nonexistent 2>&1

  在这个命令中,ls /path/to/nonexistent 的错误输出会被重定向到标准输出,因此你会在终端看到这个错误输出。

  将这两个重定向操作结合使用,command >/dev/null 2>&1,可以将 command 的标准输出和标准错误都丢弃。例如:

ls /path/to/nonexistent >/dev/null 2>&1

  在这个命令中,ls /path/to/nonexistent 的输出和错误都会被重定向到 /dev/null,因此你不会在终端看到任何输出。

  需要注意的是,>/dev/null 2>&1 的顺序是不能写反的。如果你写成 2>&1 >/dev/null,那么只有标准输出会被丢弃,标准错误还会被输出到终端。