コマンドが失敗すると、bashはパイプラインを停止します。

コマンドが失敗すると、bashはパイプラインを停止します。

次のスクリプトを検討してください

#!/usr/bin/env bash

set -eux
set -o pipefail


function will_fail() {
    echo 'I do not work because of xyz' >&2
    exit 1
}

will_fail | gzip > test.gz

これによりファイルが生成されます。test.gz

will_failパイプラインを作成せずに停止する方法はありますかtest.gz

ベストアンサー1

パイプラインが開始される前に出力ファイルが生成されるため、出力ファイルが生成されるのを防ぐ方法はありません。

したがって、唯一の機会は、パイプラインが失敗した場合にファイルを再度削除することです。

スクリプトソリューションを探している場合は、サポートされているA kshism(トラップ)を使用できます。ERRbash

この場合は、以下を使用することをお勧めします。

set -o noclobber

以前にすでに存在していたファイルが破損するのを防ぎます。

したがって、推奨されるコードは次のとおりです。

set -o noclobber

trap 'rm -rf test.gz' ERR

some_cmd | gzip > test.gz

おすすめ記事