コマンド出力は保存されず、正規表現は失敗します。

コマンド出力は保存されず、正規表現は失敗します。

yarn prettier --check ./src良いコード形式を適用するために、Reactアプリで実行されるgit post-pushフックを作成しようとしています。私はコマンドの出力を保存し、正規表現を使用して特定のエラーが発生したかどうかを確認できると思いました。

Bashスクリプトで実行しようとしています。

#!/bin/bash
cd frontend/
VAR=$(yarn prettier --check ./src)
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

出力内容は次のとおりです。

[warn] src/order/orderApi.ts
[warn] Code style issues found in the above file. Forgot to run Prettier?
error Command failed with exit code 1.                                                                          
Passed prettier

私は意図的にorderApi.txにエラーを入れましたが、Prettierがこれをキャッチすると思いました。

出力を保存するときにVariable=$(command insert) 次のチュートリアルを確認しましたが、結果が得られなかったようです。

ベストアンサー1

文字列比較を使用する代わりに、次のコマンドを使用してコマンドの終了コードを確認できます。

yarn prettier --check ./src
if [[ $? -eq 1 ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

重要: 角かっことステートメントの間にスペースを追加します[[ $? -eq 1 ]];


文字列比較に関して、糸エラーはリダイレクトされ、コマンドのみが割り当てられるstderrため、変数には実際にエラーメッセージは表示されません。stdoutしたがって、エラー/stderrも割り当てるには、次のようstderrにリダイレクトしますstdout

VAR=$(yarn prettier --check ./src 2>&1)

# or: if [[ $VAR =~ "error Command failed with exit code 1." ]]; then
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

または、stderr次のようにリダイレクトしてください。

VAR=$(yarn prettier --check ./src 2>&1 >/dev/null)

おすすめ記事