1. ホーム
  2. bash

[解決済み】コマンド出力をTeeにパイプしつつ、コマンドの終了コードを保存する【重複あり

2022-04-12 11:04:04

質問

私は、コマンド(mvn clean install)をラップするシェルスクリプトを持っていて、出力をログファイルにリダイレクトしています。

#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install

では、もし mvn clean install がエラーで失敗したら、ラッパー・シェル・スクリプトもそのエラーで失敗するようにしたいのです。しかし、私はすべての出力をteeにパイプするので、私は mvn clean install にアクセスすると $? その後、常に 0 になります (ティーが成功したため)。

コマンドでエラー出力を別ファイルに書き込ませて、後でそれを確認するようにしてみましたが、mvnのエラー出力はいつも空です(標準出力にしか書き込まないような気がします)。

のリターンコードを保持するにはどうすればよいですか? mvn clean install が、ログファイルにパイプで出力しているのでしょうか?

解決方法は?

を実行しているので bash を使用すると、その ピップエステータス 変数の代わりに $? :

mvn clean install $@ | tee $logfile
echo ${PIPESTATUS[0]}