Usé alien para convertir un RPM a .deb. NO utilicé la conversión de script de alienígena; Estoy convirtiendo a mano. De hecho, el script vomitó sobre alguna sintaxis no compatible. Mi pregunta NO es sobre cómo solucionar esta incompatibilidad, sino sobre cómo el script continúa ejecutándose exitosamente, a pesar de encontrar un error.
Aquí está la sección problemática:
if [ "`/bin/echo '\c'`" == "" ]; then
ECHO_ESC="/bin/echo"
else
ECHO_ESC="/bin/echo -e"
fi
Esto provoca el siguiente "error":
./avsetup_mcc: 11: [: \c: unexpected operator
A pesar de esto, el script continúa ejecutándose perfectamente. Entonces, ¿qué está pasando aquí?
Respuesta1
[
no es un "incorporado especial", y segúnPOSIXa de un shell no interactivo ("script") Utility syntax error (option or operand error)
integrado no especial .Shall not exit
Tanto en cuanto a por qué el shell no sale. El script funciona perfectamente porque ECHO_ESC
está configurado en algo sensato sin importar cómo se if
ramifique.
A diferencia del mensaje de error que sugiere, el error no proviene de \c
pero ==
cuyo uso no es válido [
(la igualdad de cadenas se prueba con un solo =
), pero los shells que admiten [[
(que admiten ==
) parecen permitir ==
incluso la notación entre corchetes únicos (por ejemplo bash
, ksh
). Tenga en cuenta que el código anterior nonoerror en bash, por lo que es posible que desee considerar volver a etiquetar su pregunta.