2010-12-10 4 views
4

Ich rufe einen Befehl in C++ aus einem Bash-Skript (auf Ubuntu 10.10). Der Befehl löst eine Ausnahme aus und wird beendet, und das Skript wird abgebrochen.Wie man ein bash Skript laufen lässt, wenn "set + e" nicht genug ist?

Auch mit "set + e" oder "command || true" wird das Skript nicht fortgesetzt.

Wie kann ich das Skript zwingen, fortzufahren?

+0

Bitte Skript zeigen, und ein kleinen C++ Programm, das das Problem veranschaulicht. –

+0

Was ist mit 'while: do do' oder stderr auf/dev/null wie folgt umleiten:' command 2>/dev/null'? Stellen Sie auch Ihr Skript! – Cipi

+0

Ist es seg Fehler? –

Antwort

3

Das Shell-Skript kann jedes Signal außer 9 (KILL) mit dem Befehl "trap" abfangen. Der spezielle Signalname "ERR" bedeutet einen beliebigen Fehlerstatus ungleich Null.

trap 'error=1' ERR 
while true; do 
    run-external-program 
    code="$?" 
    if [[ -n "$error" ]]; then 
    echo "Caught an error! Status = $code" 
    error= # reset the error 
    elif [[ "$code" != 0 ]]; then 
    echo "Program exited with non-zero code: $code" 
    fi 
done 

Sie können auch dem Shell sagen Fehler mit leeren Befehl zu ignorieren:

trap '' ERR 
+0

Möglicherweise müssen Sie set-E (errtrace) verwenden, damit dies konsistent funktioniert. Normalerweise erben Unterbefehle keine Fehler-Traps – Hamy

Verwandte Themen