Ich muss zugeben, ich bin mir nicht ganz sicher, was dein Ziel ist ... jedoch sollte der richtige Synat für deinen exec
-Trick folgendermaßen lauten (du hast nur ein a verpasst >
):
exec > >(tee -a logfile) 2>&1
Eine einfache Demonstration:
% Katzentest #! / bin / bash echo stdout nicht protokolliert echo stderr nicht protokolliert> & 2 exec>> (tee -a logfile) 2> & 1 echo stdout wird protokolliert echo stderr protokolliert> & 2 % bash test stdout nicht protokolliert stderr nicht protokolliert % stdout protokolliert stderr protokolliert % cat logfile stdout protokolliert stderr protokolliert %
Sie können sehen, dass die exec
Ausgabe fehlerhaft ist, indem Sie die Aufforderung erneut drucken, wenn das Skript diese Zeile erreicht. Warum loggst du dich nicht zB stdout
, aber nicht stderr
von deinem Skript?
% (echo stdout; echo stderr> & 2) | Abschlag-Logdatei stderr stdout % cat logfile stdout