失敗したコマンドのリダイレクトされた出力ファイルを消去する

失敗したコマンドのリダイレクトされた出力ファイルを消去する

するとき:

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出力ファイルは、データが入ることができるかどうかにかかわらず常に生成されるため、最初と同じ問題が発生します。

おすすめ記事