2017-08-08 31 views
1

Also habe ich dies am Anfang einer Bash-Skript-Datei (-e und -o). In einigen Funktionen möchte ich jedoch, dass es nicht ausgeht. BeispielBash - wie man set -e deaktivieren und setzen -o

set -e 
set -o pipefail 

function check_status { 
    echo "Start Check" 
    docker exec mservice bash -c "echo 'Hello' | grep 'fail'" 
    echo "End check" 
} 

check_status 

Wie kann ich verhindern, dass dies aus dem Skript Austritt aus - im Grunde, wenn ich dies ausführen, wäre es Ausdruck „Start prüfen“, aber dann beenden, weil der nächste Befehl gibt eine ‚1‘.

Ich möchte in der Lage sein, die Einstellung -e/-o an mehreren Stellen oder in verschiedenen Funktionen zu deaktivieren und zu aktivieren.

Antwort

3

Für jede set -X Option ist das Gegenteil set +X.

set +e wird set -e rückgängig machen und set +o pipefail rückgängig machen set -o pipefail.

+0

I‘ Entschuldigung, aber du bist ein Genie! – ibaralf

0

Sie können auch die Einstellungen in Ruhe lassen, und etwas tun, so einfach wie:

docker exec mservice bash -c "echo 'Hello' | grep 'fail'" || true 

... und in so Kraft tut eine erfolgreiche Ausführung dieser Befehlsliste. Es würde in diesem Fall keine programmatische Möglichkeit geben, den Fehler des Docker-Befehls zu erkennen, aber wenn der Befehl eine Fehlermeldung ausgibt, könnte der menschliche Beobachter dies bemerken.

Oder Sie können die Fehler in der Funktion

#!/usr/bin/env bash 

set -e 
set -o pipefail 

function check_status { 
    if docker exec mservice bash -c "echo 'Hello' | grep 'fail'"; then 
     echo good 
    else 
     echo bad 
    fi 
} 

status=$(check_status) 

if [ "$status" = 'bad' ]; then 
    echo "check_status failed, but still running, handling the error..." 
fi 

Speichern als testfail.sh handhaben und es für mich laufen verursacht Störungen, da meine Docker Installation beinhaltet nicht alles mservice genannt:

$ ./testfail.sh 
Error response from daemon: No such container: mservice 
check_status failed, but still running, handling the error... 
$ 
+0

Danke, tolle Lösung auch. – ibaralf