Ich versuche, eine Funktion in einem Shell-Skript zu erstellen, das einen Befehl nimmt und führt sie mit eval, und dann hat einige Nachbearbeitung auf dem Erfolg des Befehls basiert. Leider verhält sich der Code nicht so, wie ich es erwarten würde. Hier ist, was ich habe:Erhalten Sie Exit-Code für eval Befehl in sh
#!/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, es funktioniert gut. Wenn der Befehl fehlschlägt (z. B. Kompilierungsfehler), wird das Skript automatisch beendet, bevor der Fehler verarbeitet werden kann. Gibt es eine Möglichkeit, zu verhindern, dass eval austritt, oder gibt es einen anderen Ansatz, mit dem ich mein gewünschtes Verhalten erreichen kann?
sollte es keine automatische Ausfahrt sein, wenn Sie 'gesetzt haben irgendwo in Ihrem Skript -e'. Wenn Sie es haben, wird 'set + e' es deaktivieren. –
* seufz * Ich hatte 'set -o errexit', das oben im Skript des Anrufers verweilte. Danke, dass du darauf hingewiesen hast. – Jeff