Gelegentlich möchte ich ein einem Shell-Skript für definierte Bereiche
die ausgeführten Kommandos protokollieren. Das aktiviere ich mit
set -x. Am Ende des Bereichs deaktiviere ich die Protokollierung
mit set +x. Leider wird dabei genau dieser Deaktivierungsbefehl
auch protokolliert. Das gefällt mir nicht und nachfolgend
gibt es Lösungen!
Problem
Hier ein Shell-Skript mit einigen protokollierten Kommandos:
1 2 3 4 5 6 7 | |
Wenn ich dieses Skript ausführe, dann gibt es nachfolgende Ausgaben:
1 2 3 4 5 6 7 | |
Mich stört die Zeile mit “set +x”.
Subshell
Eien Möglichkeit ist die Aktivierung der Protokollierung in einer Subshell:
1 2 3 4 5 6 7 8 | |
Ausgaben:
1 2 3 4 5 6 | |
Probleme/Nachteile:
- Etwas weniger effizient wegen Subshell
- “Probleme” mit Variablen
Umlenkung
Eine andere Möglichkeit ist die Umlenkung der Fehlerausgabe von set +x:
1 2 3 4 5 6 7 | |
Ausgabe:
1 2 3 4 5 6 | |
Problem/Nachteil: Die Umlenkung sieht etwas komplizierter aus! Konkret:
- Dies geht nicht:
set -x 2>/dev/null - Dies funktoniert:
{ set -x; } 2>/dev/null
Historie
- 2022-12-04: Erste Version