次のコードを実行すると:
#!/bin/bash
PREVIOUS_COMMIT=e099d95d52b8fca99e47fd7cee5f782287178b27
SERVICE=service-web-prj1
if [ ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs "$SERVICE" ] || [ ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs 'service-web' ];
then
echo Didnt pass first
exit 0;
fi
echo passed first with $SERVICE
if ( ! echo "$SERVICE" | grep -q "^service-web" );
then
echo Didnt pass second
exit 0;
fi
echo passed second with $SERVICE
入る予定です(状態:
scripts/getLastCommit.1.sh: line 9: [: missing `]'
scripts/getLastCommit.1.sh: line 9: [: missing `]'
周りを見回すと、誰もが最後の「]」より前のスペースに言及しました。 3回確認しましたが、この内容があります。
私が間違っていることを知っている人はいますか?
ありがとう、デニス
これが私にとって効果的であることがわかりました。
if ! echo $GITDIFF | grep -q -e 'service-web*' -e $SERVICE;
ベストアンサー1
test
シェル角かっこ内ではコマンド全体をテストできません。これらの角かっこを完全に削除すると、コマンドの終了コードのみがテストされます。
#!/bin/bash
PREVIOUS_COMMIT=e099d95d52b8fca99e47fd7cee5f782287178b27
SERVICE=service-web-prj1
if ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs "$SERVICE" || ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs 'service-web'
then
echo "Didn't pass first"
exit 0
fi
echo passed first with "$SERVICE"
if ( ! echo "$SERVICE" | grep -q "^service-web" )
then
echo "Didn't pass second"
exit 0
fi
echo passed second with "$SERVICE"