ubuntuusers.de

Bash-Script bei Fehler abbrecehn

Status: Ungelöst | Ubuntu-Version: Xubuntu 14.04 (Trusty Tahr)
Antworten |

glaskugel

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3712

Ein "Master-Bash-Script" ruft eine Liste von "Unter-Bash-Scripts" auf um es vereinfacht darzustellen. Wenn eines dieser "Unter-Bash-Scripts" nun ein Problem hat, weil eine eine Option keinen gültigen Wert bekommt, dann wird dieses "Unter-Bash-Script" abgebrochen und die Liste wird weiter abgearbeitet, sodass ich von dem Problem nichts mitbekomme. Ich könnte dann zB in eine Textdatei eine Meldung schreiben, sodass ich später merke, dass es ein Problem gab. Welche Möglichkeiten habe ich noch?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Dein Unterskript liefert ja (wie jedes Programm) einen Rückgabewert. Und der ist im Fehlerfall >0 (wenn Du nicht so'n Blödsinn wie ein sinnloses exit 0 drin hast).

Folglich kannst Du das genauso mit if oder && oder über $? auswerten, wie bei jedem anderen Programm auch.
Das Master-Skript kannst Du ggf. mit exit (sogar mit Rückgabwert !) abbrechen, oder mit trap sogar automatisch bei jedem Fehler.

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

track schrieb:

Folglich kannst Du das genauso mit if oder && oder über $? auswerten, wie bei jedem anderen Programm auch.
Das Master-Skript kannst Du ggf. mit exit (sogar mit Rückgabwert !) abbrechen, oder mit trap sogar automatisch bei jedem Fehler.

Noch einfacher ist es, diese Zeile am Anfang des Skriptes einzufügen:

1
set -e

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3712

Ein "man set" bringt mich nicht weiter, wo lese ich mich zu "set -e" ein?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Steht im Bash-Manual, oder auch im Terminal unter help set.

LG,

track

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3712

Ich habe es noch nicht kapiert. Aus "help set"

-e Exit immediately if a command exits with a non-zero status.

So wie ich das verstehe, bricht das Script ab, sobald ein Fehler auftritt, oder?

Setze ich "set -e" im "Unter-Bash-Script", dann wird es beendet und das "Master-Bash-Script" ruft das nächste "Unter-Bash-Script" auf. Ansonsten glaube ich, dass es sowie das Beste ist die abgebrochenen Scripts in eine Datei zu schreiben, das hat man dann auch nach einem Neustart.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

glaskugel schrieb:

Ich habe es noch nicht kapiert. Aus "help set"

-e Exit immediately if a command exits with a non-zero status.

So wie ich das verstehe, bricht das Script ab, sobald ein Fehler auftritt, oder?

Ja. Probier es halt mal aus. Selbst ist der Mann.

Setze ich "set -e" im "Unter-Bash-Script", dann wird es beendet und das "Master-Bash-Script" ruft das nächste "Unter-Bash-Script" auf.

Ja, Du musst es natürlich im Master-Skript eintragen. Das wolltest Du doch abbrechen, wenn eines der aufgerufenen Skripte einen Fehler hat.

Ansonsten glaube ich, dass es sowie das Beste ist die abgebrochenen Scripts in eine Datei zu schreiben, das hat man dann auch nach einem Neustart.

Generell bietet es sich an bei komplexeren Operationen ein Log zu schreiben, damit Du weißt, was geklappt hat und was nicht. Ich weiß jetzt nicht, was Du da baust, aber es scheint ja schon komplizierter zu sein, wenn Du die Funktionalität auf mehrere Skripte verteilen musst. Eine andere Frage ist, ob die Shell dafür überhaupt das richtige Werkzeug ist, oder man nicht eine der bekannten Skript-Sprachen nutzen sollte.

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3712

Generell bietet es sich an bei komplexeren Operationen ein Log zu schreiben

Ja, das habe ich mir mittlerweile auch gedacht.

Antworten |