Obtenir le code de sortie pour la commande eval en sh

Je suis en train de créer une fonction dans un script shell qui prend une commande et l'exécute à l'aide de la fonction eval, puis fait un peu de post-traitement sur la base de la réussite de la commande. Malheureusement, le code ne marche pas comme je m'attends. Voici ce que j'ai:

#!/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"

Lors de la commande ($cmd) réussit, il fonctionne très bien. Lorsque la commande échoue ( erreur de compilation, par exemple ), le script se ferme automatiquement avant que je puisse le processus de l'échec. Est il possible que je peux empêcher eval de sortir, ou est-il une approche différente, je peux prendre qui me permettra de réaliser mon comportement souhaité?

il devrait y avoir pas de sortie automatique, sauf si vous avez set -e quelque part dans votre script. Si vous l'avez, set +e désactiver.
soupir j'ai eu set -o errexit persistante au-dessus de l'appelant script. Merci pour cette remarque.

OriginalL'auteur Jeff | 2013-01-17