Weitergabe des Exit-Codes an den Aufrufer im Falle eines Shell-Fehlers aus einem Skript mit einer Exit-Trap

StackOverflow https://stackoverflow.com//questions/25064292

  •  23-12-2019
  •  | 
  •  

Frage

Ist es möglich, im Falle eines Syntaxfehlers in einem Bash-Skript mit einer EXIT-Trap einen Exit-Code an den Aufrufer weiterzugeben?Wenn ich zum Beispiel:

#! /bin/bash

set -eu

trap "echo dying!!" EXIT

echo yeah
echo $UNBOUND_VARIABLE
echo boo

Wenn Sie es dann ausführen, erhalten Sie den Exit-Code 0, auch wenn das Skript nicht wirklich erfolgreich beendet wurde:

$ bash test.sh
yeah
test.sh: line 8: UNBOUND_VARIABLE: unbound variable
dying!!

$ echo $?
0

Aber wenn ich die Exit-Trap auskommentiere, gibt das Skript 1 zurück.Wenn ich alternativ die Zeile mit der ungebundenen Variablen durch einen Befehl ersetze, der ungleich Null zurückgibt (z. B. /bin/false), wird dieser Exit-Wert so weitergegeben, wie ich es möchte.

War es hilfreich?

Lösung 2

Dieses Verhalten bezieht sich auf verschiedene Bash-Versionen.Das Originalskript arbeitet wie erwartet auf Bash 4.2, aber nicht auf 3.2.Wenn Sie den fehleranfälligen Code in einer separaten Skriptdatei haben, und lauft es in einer Unterschale um Probleme in früheren Bash-Versionen:

generasacodicetagpre.

sub.sh:

generasacodicetagpre.

Andere Tipps

Die Shell wird mit dem Ergebnis des zuletzt ausgeführten Befehls beendet.In Ihrem Falle ist das so echo, was normalerweise mit Erfolg zurückkehrt.

Einfach Ihren Wert verbreiten exit damit.

#!/bin/bash

set -eu

die() {
  echo "Dying!!"
  exit "$1"
}

trap 'die $?' EXIT

echo yeah
echo $unbound
echo boo

Beachten Sie das auch set -e gilt als schädlich – es lässt den Eindruck entstehen, dass das Skript beendet wird, wenn ein Befehl fehlschlägt, was nicht immer der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top