清除失败命令的重定向输出文件

清除失败命令的重定向输出文件

做时:

CMD > file.out

如果 CMD 失败(非零退出代码),“file.out”为空或不完整。

我正在寻找一种清理方法,以防 CMD 失败。

当 CMD 在 CRON 作业中运行时,我希望删除定向输出文件,而不是留下空/不完整的文件。

我最初的想法是:

if ! CMD > file.out; then rm file.out; fi

但是它隐藏了 CMD 退出状态,因此不适合。 (特别是对于 CRON)

  • 有人能想到更好的解决方案吗?
  • bash 或 sh 中是否有某些功能可以允许这样做?
  • 我希望也许有一些类似“T恤”的实用程序可以:
    • 它将 STDOUT 输出重定向到文件
    • 如果命令失败,它将删除输出文件
    • 在所有情况下都会返回 CMD 退出代码

答案1

您最初的想法很好,可以扩展到

if ! CMD >file.out; then rm file.out; exit 1; fi

如果您需要从 捕获特定的退出状态CMD,请执行此操作并exit稍后使用它:

if ! CMD >file.out; then err="$?"; rm file.out; exit "$err"; fi

请注意,您无法使用,exit "$?"因为此时,rm已经修改了$?.


tee将始终创建其输出文件,无论数据是否可放入其中,因此您将遇到与一开始相同的问题。

相关内容