简短的回答是您将stderr 重定向到stdout,因此您会收到写入FD2 的错误消息以及写入FD1 的正常输出FD1。 (FD = 文件描述符)。它通常允许您捕获要保存在日志文件等中的错误消息的输出,否则仅通过将stdout 重定向到日志就无法捕获这些消息。
作为简要背景,您的 shell 有 3 个众所周知的文件描述符,涵盖基本的读写:
0 - 标准输入(您的输入缓冲区)
1 - 标准输出(您的正常输出描述符)
2 - stderr(您的正常错误描述符)
当您阅读或写作时,几乎任何编程语言(包括您的 shell)都使用这些通用文件描述符来管理输入/输出。在您的 shell 中,您可以重定向或合并来自 stdout 和 stderr 的输出。一般格式为:
m > &n ## where n & m are 1, 2
例如,您可以将任意命令中的stdout 和stderr 组合到一个文件中:
./someprogram > myfile 2>&1
基本上是说,“将stdout上的someprogram的输出重定向到myfile,同时在stdout中包含stderr。
有几个很好的参考,一个是BASH Programming - Introduction HOW-TO: All about redirection
注意:请确保您还了解重定向可以临时发生(基于每个命令),也可以使用exec 为脚本范围设置。