Bash- Prozessersetzungen :
command_a 2> >(sed 's/^/command_a: /' >&2) > command_a.log & command_b 2> >(sed 's/^/command_b: /' >&2) > command_b.log &
Sie müssen nicht weiterleiten, tee
wenn Sie nur stdout in eine Datei umleiten.
Sie können sogar ausgefallene Dinge wie das Drucken eines Zeitstempels ausführen:
$ { date echo stdout sleep 3 echo stderr >&2 } 2> >(gawk '' >&2) > file.log
foobar: [2015-02-24 11:43:32] stderr
$ cat file.log
Tue Feb 24 11:43:29 EST 2015 stdout
Stecken Sie es in eine Funktion zur Wiederverwendung:
log_stderr() { gawk -v pref="$1" '' >&2 } command_a > command_a.log 2> >(log_stderr "command_a")