Hi allerseits,
ich hätte da 'ne ganz dringende Frage bzgl. Fehlerbehandlung bei Shellskripten, vielleicht hab ich ja Glück und Ihr könnt mir dabei helfen:
Angenommen ich schreib 'n Shell-Skript, das per Cronjob jeden Abend irgend’nen ganz wichtigen Task erledigt und dabei würde, wenn irgendwas schief gehen sollte 'n gaaaanz riesiger Schaden entstehen und von daher muss wirklich 100%ig sicher gestellt sein, dass auf ALLE Fehler adäquat reagiert wird.
Zur Vereinfachung gelte folgendes:
Das Skript sei 1000 Zeilen lang.
Sollte in irgendeiner beliebigen Zeile irgendwas schief gehen, dann reicht es, wenn irgend’ne Funktion namens „fail“ aufgerufen wird, die sich um den Rest kümmert, es ist nur GANZ WICHTIG, dass auch wirklich bei jedem noch so winzig kleinen Fehler die Funktion ‚fail‘ aufgerufen wird.
Das Skritp sieht beispielsweise etwa so aus:
cmd1
cmd2 | cmd3 | cmd4
cmd5
…
Wie schaff ich es auf möglichst ohne viel zuätzliche Schreibarbeit, dass wirklich JEDER einzelne Befehl auf „return code==0“ getestet wird???
Super wäre was in der Art hier:
try {
cmd1
cmd2 | cmd3 | cmd4
cmd5
…
}
catch
{
fail
}
aber das geht ja leider nicht in bash oder ähnlichem.
Eine etwas schreibaufwendige Methode wäre folgende, aber leider gibt’s da beim Pipen Probleme, weil man da immer den Returncode des letzten Befehls zurückbekommt - zumindest in der bash:
cmd1 || fail
cmd2 || fail
cmd2 || fail
cmd3 | cmd4 | cmd5 || fail #ignoriert leider Fehler bei cmd3 oder cmd4
cmd6 || fail
…
Habt Ihr vielleicht irgendwelche Vorschläge???
Mir wäre auch schon etwas geholfen, wenn mir jemand sagen könnte ob und wie es geht, dass beim Pipen auch ein Fehlercode irgendwie mit „durchgeschleust“ wird.
Ganz herzlichen Dank schon im Voraus
Eure Natascha
PS: Übrigens, der Ansatz, „einfach auf die Fehlerausgabe achten und als Indiz für etwaig aufgetretene Fehler verwenden“ scheidet aus.