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