Bash-Skript-Trap für Exit und Err und Logik für Differenz

Bash-Skript-Trap für Exit und Err und Logik für Differenz

Ich habe ein Bash-Skript und möchte die Möglichkeit hinzufügen, sowohl EXIT- als auch ERR-Bedingungen abzufangen. Die Struktur ist derzeit

trap cleanup EXIT

function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}

notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');

Was ist die empfohlene Methode, um einen Trap für einen Fehler hinzuzufügen und (optional) den Beendigungsgrund zu erfassen und diesen über die Benachrichtigungsfunktion zu senden? Derzeit löscht die Bereinigung lediglich die Sperrdatei beim BEENDEN.

Ich möchte in der Lage sein, eine notify(reason)Nachricht an Slack zu senden, wenn das Skript unerwartet fehlschlägt, diese aber nicht beim normalen BEENDEN senden.

Beeinträchtigt meine Ausführungsverkettung die ordnungsgemäße Fehlererkennung?

Antwort1

Sie können keine Fehler trap ... ERRin Befehlen abfangen, deren Exit-Code getestet wurde. In Ihrem speziellen Fall aus der Bash-Manpage:

Die ERR-Trap wird nicht ausgeführt, wenn der fehlgeschlagene Befehl ... Teil eines Befehls ist, der in einer &&- oder ||-Liste ausgeführt wird, mit Ausnahme des Befehls nach dem abschließenden && ...

Der einfachste Weg, die Bereinigung eines Satzes zu gewährleisten, besteht im Allgemeinen darin, alle Funktionen in einer Subshell auszuführen. Die Bereinigung kann dann unabhängig von der Beendigung der Funktion noch immer durchgeführt werden.

verwandte Informationen