在shell脚本中,如何在执行标准输出(而非标准错误)时回显shell命令?

时间:2017-08-25 02:39:48

标签: linux shell cron

我想编写一个简单的cron作业包装器,以下列方式扩展本机cron:

  1. 只有在作业打印到标准错误或作业的返回代码不为0时才会发送电子邮件。
  2. 它将执行的所有命令(及其输出)记录到日志文件中。
  3. 这是我的问题,我希望记录在cron作业中执行的所有命令(上面的子弹#2),但/bin/bash -x job.sh(或set -x内的job.sh)会触发警报电子邮件(打破上面的子弹#1。

1 个答案:

答案 0 :(得分:1)

来自bash(1)手册页:

  

BASH_XTRACEFD

     

如果设置为与有效文件描述符对应的整数,                  bash 将写入set -x时生成的跟踪输出                 启用该文件描述符。文件描述符已关闭                 当 BASH_XTRACEFD 未设置或分配新值时。解封                  BASH_XTRACEFD 或为其指定空字符串会导致跟踪                 输出发送到标准错误。请注意设置                  BASH_XTRACEFD 到2(标准错误文件描述符)然后                 取消设置将导致标准错误被关闭。

...

BASH_XTRACEFD=1
set -x