다음 코드를 실행하면:
#!/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 `]'
주위를 둘러보니 모두가 마지막 "]" 이전의 공백을 언급했습니다. 세 번 확인했는데 이 내용이 있습니다.
내가 뭘 잘못하고 있는지 아는 사람 있나요?
고마워요, 데니스
이것이 나에게 효과적이라는 것을 알았습니다.
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"