Was passiert, wenn ein Skript in einem der Befehle auf einen Fehler stößt?

Was passiert, wenn ein Skript in einem der Befehle auf einen Fehler stößt?

Ich habe Alien verwendet, um ein RPM in eine .deb-Datei zu konvertieren. Ich habe NICHT die Skriptkonvertierung von Alien verwendet; ich konvertiere von Hand. Tatsächlich hat das Skript eine nicht kompatible Syntax angezeigt. Meine Frage ist NICHT, wie man diese Inkompatibilität behebt, sondern vielmehr, wie das Skript trotz eines Fehlers weiterhin erfolgreich ausgeführt wird.

Hier ist der problematische Abschnitt:

if [ "`/bin/echo '\c'`" == "" ]; then
   ECHO_ESC="/bin/echo"
else
   ECHO_ESC="/bin/echo -e"
fi

Dies führt zu folgendem „Fehler“:

./avsetup_mcc: 11: [: \c: unexpected operator

Trotzdem wird das Skript weiterhin einwandfrei ausgeführt. Was ist also hier los?

Antwort1

[ist kein "spezielles Builtin", und lautPOSIXeine Utility syntax error (option or operand error)nicht speziell integrierte, Shall not exitnicht interaktive Shell („Skript“).

So viel zur Frage, warum die Shell nicht beendet wird. Das Skript funktioniert einwandfrei, da ECHO_ESCes unabhängig von den ifVerzweigungen auf einen vernünftigen Wert eingestellt ist.

Anders als die Fehlermeldung vermuten lässt, kommt der Fehler nicht von , \csondern von , ==was nicht mit verwendet werden kann [(Zeichenfolgengleichheit wird mit einem einzelnen getestet =), aber Shells, die [[(das unterstützt ==) unterstützen, scheinen ==sogar die einfache Klammernotation zuzulassen (z. B. bash, ksh). Beachten Sie, dass der obige Code nichtnichtFehler unter Bash, Sie sollten Ihre Frage also möglicherweise neu taggen.

verwandte Informationen