コマンドが失敗するとスクリプトは失敗しますが、いずれにせよすべてのコマンドを実行します。

コマンドが失敗するとスクリプトは失敗しますが、いずれにせよすべてのコマンドを実行します。

ソースコードのカスタムリンターであるスクリプトでいくつかのコマンドを実行する必要があります。各実行はレポートを生成し、ルールに違反すると終了コード 1 で失敗します。レポートの生成に失敗する前にすべてのコマンドを実行し、ゼロ以外の終了コードでコマンドが失敗した場合は失敗する必要があります。最初のエラーが発生した時点でスクリプトが存在したため、スクリプトは機能しません。

lint ./module1/src/main/java && lint ./module2/src/main/java && lint module3/src/main/java

今、私は次のスクリプトを使用しています。

lint ./module1/src/main/java
code1="$?"
lint ./module2/src/main/java
code2="$?"
lint ./module3/src/main/java
code3="$?"

if [[ "$code1" != "0" || "$code2" != "0" || "$code3" != "0" ]]; then
  exit 1
fi

しかし、過度に複雑でスケーラブルではないようです(追加変数を追加して次のコマンドを確認する必要があります)。

このスクリプトをもう少しエレガントにできますか?

ベストアンサー1

すべてのテストを完了し、最終的な完全なステータスコードを返すには、この方法でコーディングする必要があります。これは一つの方法です

#!/bin/bash
#
ss=0

lint ./module1/src/main/java || ((ss++))
lint ./module2/src/main/java || ((ss++))
lint ./module3/src/main/java || ((ss++))

exit $ss

作成されると、失敗したテストの数に対応する終了コードで失敗します。それでもtrue / false(0/0ではない)をテストできますが、1どちらの場合も正確に終了するコードが必要な場合以上テストが失敗し、完全((ss++))に変更されましたss=1

おすすめ記事