Wie erhalte ich STDOUT und STDERR, um zum Terminal und zu einer Protokolldatei zu gelangen?

Ich habe ein Skript, das von nicht-technischen Benutzern interaktiv ausgeführt wird. Das Skript schreibt Statusaktualisierungen in STDOUT, damit der Benutzer sicher sein kann, dass das Skript in Ordnung ausgeführt wird.

Ich möchte, dass sowohl STDOUT als auch STDERR zum Terminal umgeleitet werden (damit der Benutzer sehen kann, dass das Skript funktioniert und ob ein Problem aufgetreten ist). Ich möchte auch, dass beide Streams in eine Protokolldatei umgeleitet werden.

Ich habe eine Reihe von Lösungen im Internet gesehen. Einige funktionieren nicht und andere sind schrecklich kompliziert. Ich habe eine praktikable Lösung entwickelt (die ich als Antwort eingeben werde), aber es ist klug.

Die perfekte Lösung wäre eine einzelne Codezeile, die in den Anfang jedes Skripts eingefügt werden könnte, das beide Streams an das Terminal und eine Protokolldatei sendet.

BEARBEITEN Die Umleitung von STDERR nach STDOUT und die Weiterleitung des Ergebnisses an tee funktioniert, hängt jedoch davon ab, ob die Benutzer daran denken, die Ausgabe umzuleiten und weiterzuleiten. Ich möchte, dass die Protokollierung narrensicher und automatisch erfolgt (daher möchte ich die Lösung auch in das Skript selbst einbetten können.)

Antworten auf die Frage(16)

Ihre Antwort auf die Frage