我正在创建一个处理预定义数据集的脚本,输出到文件。我想在一个数据(在我有权访问的每个集合中始终为“常规”)不同时声明该值未处理(因为我不知道它如何影响数据)时弹出警告。我应该将此警告输出到stderr或stdout吗?
答案 0 :(得分:29)
如果我保存了此脚本的输出(即仅限stdout)以便我以后可以处理它,那么该警告会干扰输出的解析方式吗?此外,如果输出通过管道传输到另一个进程,则警告应显示在终端上,以便用户立即看到它。
出于这些原因,通常会向stderr输出警告。
答案 1 :(得分:6)
警告应该发给stderr。
除了其他人提出的要点(导致下游进程的解析错误以及在控制台上隐藏用户的错误)之外,还存在一个灵活性问题。
如果用户不希望来自stderr的警告转到正在解析stdout的下游进程,则他们不必做任何特殊的事情。
your_script | downstream_process
如果用户希望来自stderr的警告转到将解析stdout和stderr的下游进程,则用户可以使用2>& 1将stderr重定向到stdout。
your_script 2>&1 | downstream_process
如果将警告和任何正常数据输出到stdout,则用户无法在不解析所有内容的情况下将警告与数据分离。 因此,向stderr发送警告也会使您的脚本更具灵活性。
答案 2 :(得分:1)
真正的问题是:如果有人要将您脚本的输出重定向到文件,您是希望将警告放在文件中,还是直接发送给用户?
如果您希望用户因警告而采取某些操作,则应转至STDERR。如果某个下游脚本可能被警告触发,则应该转到STDERR。