El script de Shell no puede analizar una cadena bajo la declaración if

El script de Shell no puede analizar una cadena bajo la declaración if

Tengo un script simple en el que intento encontrar si make some_target existe o no. En caso de que no exista, imprima una declaración y salga 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

pero arroja un error y entra en el bucle 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

Respuesta1

Pude encontrar una respuesta a continuación:

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

Respuesta2

La coincidencia de patrones (*) es posible enbashoperadores logicos ==, =y !=donde el operando de la derecha se considera un patrón. Entonces puedes escribir tu condición:

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

para comprobar si la respuesta contiene No rule to make target.

Dicho esto, ¿podría ser más eficaz comprobar el código de retorno de make?

(*) Esta es la misma coincidencia de patrones básica que se realiza con los nombres de archivos. También hay un operador lógico =~que toma una expresión regular.

información relacionada