O script Shell não consegue analisar uma string na instrução if

O script Shell não consegue analisar uma string na instrução if

Eu tenho um script simples no qual estou tentando descobrir se make some_target existe ou não. Caso não exista, imprima uma instrução e saia 1.

#!/bin/bash
set +ex
output=$(make -n some_target 2>&1 | head -1)
echo "$output"
if [ "$output" == "*No rule to make target*" ]; then
  echo "Target is not Present"
  exit 1
else
  echo "foo"  
fi

mas está gerando um erro e entrando no loop else

make: *** No rule to make target 'some_target'.  Stop.
test.sh: 5: [: make: *** No rule to make target 'some_target'.  Stop.: unexpected operato                                                                                                  
foo

Responder1

Consegui encontrar uma resposta abaixo:

#!/bin/sh
set +ex 
if make -n some_target 2>&1 | grep -m 1 "No rule to make target"; then
        echo "Target is not Present"
        exit 1
else
        echo "foo"
fi

Responder2

A correspondência de padrões (*) é possível embashOperadores lógicos ==, =e !=onde o operando à direita é considerado um padrão. Então você pode escrever sua condição:

if [[ $output == *'No rule to make target'* ]]

para verificar se a resposta contém No rule to make target.

Dito isto, poderia ser mais eficiente verificar o código de retorno de make?

(*) Esta é a mesma correspondência de padrões básica feita em nomes de arquivos. Também existe um operador lógico =~que utiliza uma expressão regular.

informação relacionada