erro: “[: missing ']'” com espaço antes dos colchetes

1

Quando estou executando o seguinte código:

#!/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

Estou recebendo:

scripts/getLastCommit.1.sh: line 9: [: missing ']'
scripts/getLastCommit.1.sh: line 9: [: missing ']'

Eu olhei em volta e todo mundo mencionou o espaço antes do último "]" Que eu tripliquei o cheque e eu tenho que

Alguém sabe o que estou fazendo errado?

Obrigado Dennis

Descobri que isso fará o truque para mim:

if ! echo $GITDIFF | grep -q -e 'service-web*' -e $SERVICE;
    
por SweKilt 09.06.2018 / 19:29

1 resposta

2

Você não pode testar comandos inteiros dentro dos colchetes test do shell. Você deseja remover esses colchetes completamente, o que fará com que ele simplesmente teste o código de saída dos comandos.

#!/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"
    
por 09.06.2018 / 19:34