2

そこで、PV を使用して、さまざまなコマンド (つまり、tar) の進行状況バーを作成しようとしています。これらのコマンドを Ruby スクリプトで実行しています。問題は、pv がパイプ チェーンの最後のコマンドであるため、すべてのエラーを吸収していることです。

すなわち。

result = `tar -cpz testDir 2>&1 | pv -pterb > testTar.tar.gz`

以下のコマンドは、pv コマンドによって吸収されるため、失敗した場合 (つまり、ディレクトリ内のスペースが不足した場合) にエラーを返しません。何か案は?

4

1 に答える 1

1

そうですね、通常は最後のコマンドが重要です。pipefailオプションが必要です。

$ sh -c '                 false | true'; echo $?
0
$ sh -c 'set -o pipefail; false | true'; echo $?
1

純粋なPosixで複製する簡単な方法はありませんがpipefail、bashと一般的にPosixに忠実なdash(1)がそれを実装していることに気付きました。

于 2013-03-20T18:56:49.103 に答える