Vor einiger Zeit habe ich ein Skript erstellt und einige Protokolldateien hinzugefügt, aber ich habe vergessen, wie die Umleitung für die Protokollierung funktioniert :-(
Der Kern davon ist:
#!/bin/bash
LOGFILE=/some/path/mylogfile
(
# here go my commands which produce some stdout
# and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )
Wenn ich das Skript ausführe, druckt es nichts stdout
, sondern nur das, was ankommt stderr
. Logfile ${LOGFILE}
erfasst sowohl stdout als auch stderr.
Wenn ich das Skript ausführe und auf meinem Terminal keine Ausgabe erfolgt, weiß ich, dass alles in Ordnung ist. Wenn eine Ausgabe vorliegt, weiß ich, dass ein Fehler aufgetreten ist, und kann die Protokolldatei überprüfen, um herauszufinden, wo das Problem liegt.
Der Teil der Umleitung, der mich jetzt verwirrt, ist die Syntax von: 2> >( some command )
Kann mir jemand erklären, was da los ist?
echo <(date)
, es mir den Namen der substituierten Datei gibt:/dev/fd/63
. Wenn ich ausführencat <(date)
, gibt es mir das Datum, dh den Inhalt der substituierten Datei:Fri Nov 18 14:11:09 NZDT 2016
./dev
ist ein Name für die Pipe zwischen den Prozessen.tee
in diesem Fall) nicht weitergeleitet werden kann ?tee
stderr und stdout voneinander zu trennen.