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 exit
nicht interaktive Shell („Skript“).
So viel zur Frage, warum die Shell nicht beendet wird. Das Skript funktioniert einwandfrei, da ECHO_ESC
es unabhängig von den if
Verzweigungen auf einen vernünftigen Wert eingestellt ist.
Anders als die Fehlermeldung vermuten lässt, kommt der Fehler nicht von , \c
sondern 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.