Wie kann man stdout + stderr in eine Datei umleiten, während die Streams getrennt bleiben?
Das Umleiten von stdout + stderr, sodass beide in eine Datei geschrieben werden, während sie weiterhin in stdout ausgegeben werden, ist einfach genug:
cmd 2>&1 | tee output_file
Aber dann kommen jetzt beide stdout / stderr von cmd auf stdout. Ich möchte stdout + stderr in dieselbe Datei schreiben (die Reihenfolge bleibt also erhalten, vorausgesetzt, cmd ist Single-Threaded), aber ich kann sie dann auch separat umleiten, in etwa wie folgt:
some_magic_tee_variant combined_output cmd > >(command-expecting-stdout) 2> >(command-expecting-stderr)
Also enthält combined_output die beiden, wobei die Reihenfolge beibehalten wird, aber das Kommando-Expecting-Stdout bekommt nur stdout und das Kommando-Expecting-Stderr bekommt nur stderr. Grundsätzlich möchte ich stdout + stderr protokollieren, während stdout und stderr weiterhin separat umgeleitet und weitergeleitet werden können. Das Problem mit dem Tee-Ansatz ist, dass er sie zusammenwirbelt. Gibt es eine Möglichkeit, dies in bash / zsh zu tun?