抑制输出,除非退出代码非零

抑制输出,除非退出代码非零

除非程序以非零代码退出,否则抑制输出(stdout 和 stderr)的最佳方法是什么?我在想:

quiet_success()
{
  file=$(mktemp)
  if ! "$@" > "$file" 2>&1; then
    cat "$file"
  fi
  rm -f "$file"
}

并运行quiet_success my_long_noisy_script.sh,但我不确定是否有更好的方法。我觉得这一定是其他人需要做的事情。

对于上下文,我希望将其添加到我的 cron 脚本中,以便在失败时我会收到包含所有内容的电子邮件,但如果失败则不会。

答案1

无论如何,您都必须在某个地方缓冲输出,因为您需要等待退出代码才能知道该怎么做。像这样的事情可能是最简单的:

$ output=`my_long_noisy_script.sh 2>&1` || echo $output

答案2

moreutils软件包中包含一个程序chronic以此目的。你只是这样称呼它

chronic my_program args ...

在 cron 作业中非常方便。

相关内容