Frage

Ohne Argumente trap gibt die aktuell eingestellten Befehle für alle Traps aus.Eine Subshell erbt jedoch keine Traps, sodass das kanonische Beispiel zum Speichern und Wiederherstellen von Traps in bash fehlschlägt:

save_traps=$(trap)
...
eval "$save_traps"

Der Trap auf der rechten Seite der Zuweisung wird in einer Subshell ausgeführt, sodass save_traps immer die leere Zeichenfolge ist.Anders als das Schreiben der Ausgabe von trap wie kann ein Skript in einer temporären Datei den aktuellen Befehlssatz für einen Trap finden?

War es hilfreich?

Lösung

Funktioniert für mich.

Erstellen einer Probenfalle:

$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO

Lagern Sie die Falle in save_traps:

$ save_traps=$(trap)

Entfernen:

$ trap SIGIO
$ trap | wc -l
   0

Wiederherstellen:

$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO

Getestet mit:

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

Andere Tipps

Obwohl die Bash-Manpage zu sagen scheint, dass Traps in Subshells zurückgesetzt werden und die Befehlsersetzung in einer Subshell ausgeführt wird, wird ausgeführt trap inneren $() funktioniert trotzdem (getestet in Bash 3.2 und 4.2).Es wird auch in POSIX erwähnt, dass traps=$(trap) sollte funktionieren.

Dank pgas in #bash an irc.freenode.net.

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