
するとき:
CMD > file.out
CMDが失敗した場合(ゼロ以外の終了コード)、「file.out」は空または不完全です。
CMDが失敗した場合に備えたクリーンアップ方法を探しています。
CRONジョブでCMDが実行されたときに空または不完全なファイルを残さずに、指定された出力ファイルを削除したいと思います。
私の最初の考えは次のとおりです。
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
出力ファイルは、データが入ることができるかどうかにかかわらず常に生成されるため、最初と同じ問題が発生します。