サブコマンド内でコマンドが失敗すると失敗します。

サブコマンド内でコマンドが失敗すると失敗します。

ディレクトリリストからコマンドを実行したいですgradle --build-cache。また、ディレクトリは "Project"文字列で始まる必要があり、 "Test"で終わらないでください。次のコマンドを使用してこれを正常に実行しました。

find . -maxdepth 1 -type d \( ! -name . \) -name "Project*" ! -name "*Test*" -exec sh -c "cd '{}' && pwd && gradle --build-cache" \;

しかし、私の問題は、gradleコマンドが失敗する可能性があることです。コマンドのみを実行すると「exit 1」が返されますが、ディレクトリコマンドの1つが失敗すると、失敗を返さずにスクリプトが続行されます。最後に、ループは成功を返しますexit 0...

gradleコマンドが失敗したときにループの実行を停止して通常のコマンドに戻る方法はexit 1

ありがとうございます:)

ベストアンサー1

同様の質問です。https://apple.stackexchange.com/questions/49042/how-do-i-make-find-fail-if-exec-fails。私はあなたの目標を達成する可能性が最も高い2つの便利な方法をリストしました。

最も簡単な方法はを使用することですが、xargsこれはコマンドが見つかるパスにスペースがない場合にのみ機能しますfind

find … -print0 | xargs -0 -n1 invalid_command

古いBash(4.xx未満)を使用している場合は、再帰ワイルドカードの検索と使用を削除するか、再帰検索を直接実装することもできます(ディレクトリツリーが問題を引き起こすのに十分深いかどうか疑問です)。

shopt -s globstar
set -e
for x in **/*.xml; do invalid_command "$x"; done

または、1行で作成する必要がない場合は、まずすべてのディレクトリを見つけて一時ファイル(mktempそのファイル用)に保存し、リストを使用して必要なすべての操作を実行できます。さらにフィルタリングするには、その項目に対してコマンドを実行します。

おすすめ記事