Holen Sie exit-code für "eval" - Befehl in sh

Ich versuche, Sie erstellen eine Funktion in einem shell-Skript, das dauert ein Kommando und führt es mittels eval zu setzen, und dann ein paar post-processing-basierend auf dem Erfolg des Befehls. Leider ist der code nicht verhält, wie ich es erwarten würde. Hier ist, was ich habe:

#!/bin/sh

...

function run_cmd()
{
        # $1 = build cmd

        typeset cmd="$1"
        typeset ret_code

        eval $cmd
        ret_code=$?

        if [ $ret_code == 0 ]
        then
                # Process Success
        else
                # Process Failure
        fi

}

run_cmd "xcodebuild -target \"blah\" -configuration Debug"

Wenn der Befehl ($cmd) erfolgreich ist, funktioniert es einwandfrei. Wenn der Befehl fehlschlägt ( compilation Fehler, zum Beispiel ), wird das Skript automatisch beendet, bevor ich den Prozess des Scheiterns. Gibt es eine Möglichkeit das ich verhindern kann, eval verlassen, oder gibt es einen anderen Ansatz, den ich nehmen kann, dass wird mir erlauben, das erreichen der von mir gewünschten Verhalten?

  • es sollte keine automatische Ausfahrt, es sei denn, Sie haben set -e irgendwo in Ihrem Skript. Wenn Sie es haben, set +e deaktiviert werden.
  • * seufz * ich hatte set -o errexit Verweilen an der Spitze der Anrufer Skript. Vielen Dank für den Hinweis.
InformationsquelleAutor Jeff | 2013-01-17
Schreibe einen Kommentar