重定向屏幕上的stderr和仅在同一文件上的stdout文件

时间:2017-10-26 10:19:30

标签: bash

我正在尝试重定向:

  • stderr:screen,file output.txt
  • stdout:仅限同一文件output.txt

为cron工作。

我试图实现的目标是仅在出现错误时收到通知,同时将整个输出记录到文件中。

电子邮件消息应包含这些错误消息,因为在许多情况下,我只能通过阅读错误消息来识别并修复问题。我需要收到有关各种错误的通知。该脚本也会在stderr上打印自己的错误。

我需要将整个输出记录在同一个文件中,因为知道在抛出错误时脚本正在做什么很有用。

必须截断现有的日志文件。

1 个答案:

答案 0 :(得分:0)

找到它:

exec 4>output.log; ./script 2> >(tee >(cat - >&4)) 1>&4

注意:

  • stdout已经重定向的同一文件上使用tee时,必须使用文件描述符以避免竞争条件;
  • exec 4>output.log而非exec 4<>output.log否则文件不会被截断;
  • tee >(cat - >&4)是将文件描述符而不是文件名传递给此类命令的语法;
  • 2> >(tee ...)是将stderr重定向到tee命令的语法