34

我正在制作一个脚本来处理一组预定义的数据,并输出到一个文件中。当一个数据(在我可以访问的每一组中始终是“常规”)不同时,我想弹出一个警告,说明该值未处理(因为我不知道它如何影响数据)。我应该将此警告输出到 stderr 还是 stdout?

4

3 回答 3

39

如果我保存了该脚本的输出(即仅标准输出)以便稍后处理它,该警告会干扰输出的解析方式吗?此外,如果输出通过管道传输到另一个进程,则警告应显示在终端上,以便用户立即看到。

由于这些原因,您通常会向 stderr 输出警告。

于 2009-09-16T04:37:51.507 回答
10

警告应该发送到 stderr。

除了其他人提出的观点(导致下游进程解析错误并在控制台向用户隐藏错误)之外,还有一个灵活性问题。

如果用户不希望来自 stderr 的警告转到解析 stdout 的下游进程,他们不必做任何特别的事情。

your_script | downstream_process

如果用户希望来自 stderr 的警告转到将解析 stdout 和 stderr 的下游进程,则用户可以使用 2>&1 将 stderr 重定向到 stdout。

your_script 2>&1 | downstream_process

如果您将警告和任何正常数据都输出到标准输出,则用户无法在不解析所有内容的情况下将警告与数据分开。因此,将警告发送到 stderr 也会使您的脚本更加灵活。

于 2009-09-16T05:35:15.477 回答
1

真正的问题是:如果有人将脚本的输出重定向到文件,您希望将警告放在文件中还是直接发送给用户?

如果您希望用户因警告而采取一些行动,则应转到 STDERR。如果某些下游脚本可能会被警告绊倒,它应该转到 STDERR。

于 2009-09-16T04:39:01.347 回答