做时:
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
将始终创建其输出文件,无论数据是否可放入其中,因此您将遇到与一开始相同的问题。