bash - exit
bubble
- sonstiges
0 M.
Ich habe insgesamt 3 Scripts. Eins um Funktionen bereit zustellen (functions.sh), ein Hauptscript (main.sh), dass diverese andere Scripts aufruft (hier inner.sh)
In der functions.sh will ich eine Funktion definieren für formatierte Fehlermeldung und das ganze dann mit dem Exit Code 1 beendet, dabei zickt aber inner.sh rum.
functions.sh:
function _error {
echo -e "ERROR! ${@}!\n\nFAILED!\n\n"
exit 1
}
main.sh:
source function.sh
do_something || _error do_something failed.
source inner.sh
echo "test"
inner.sh:
_error error test
Wenn do_something fehl schlägt, wird das komplette Script abgebrochen, wie es soll (Formatierte Meldung und exit code).
Aber wenn do_something OK ist und source inner.sh
ausgeführt wird, kommt zwar meine formatierte Meldung, allerdings bewirkt das exit 1
überhaupt nichts und "test" wird auch ausgegeben, das soll aber aber nicht passieren, sprich inner.sh soll auch die Ausführung von main.sh stoppen.
source inner.sh || exit $?
hilft auch nichts.
Irgendwelche Ideen?
MfG
bubble
Mahlzeit,
Nachtrag: Also das exit 1 aus der Funktion wird nicht automatisch weitergereicht wollte ich damit sagen.
Nachtrag: Also das exit 1 aus der Funktion wird nicht automatisch weitergereicht wollte ich damit sagen.
Dieser Satz hat mich nochmal nachdenken lassen. Ich hab meinen Fehler jetzt gefunden. Das Problem war, dass ich inner.sh in einer while-Schleife ausgeführt hab:
find $repo -type f -name "*.repo" | while read repo; do
source $repo
echo test1
done
echo test2
($repo steht hier für inner.sh)
wenn $repo nun ein exit 1 liefert wird "test1" nicht ausgegeben, die Schleife verlassen und normal weiter gemacht, sprich "test2" ausgegeben.
So arbeitet es wie gewünscht
find $repo -type f -name "*.repo" | while read repo; do
source $repo
echo test1
done || exit $?
echo test2
MfG
bubble