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 enbash
operadores 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.