除非程序以非零代码退出,否则抑制输出(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