Können Sie jeder mit „tee“ geschriebenen Zeile das aktuelle Datum und die aktuelle Uhrzeit voranstellen?

Können Sie jeder mit „tee“ geschriebenen Zeile das aktuelle Datum und die aktuelle Uhrzeit voranstellen?

Ich verwende den Befehl „tee“, um die Ergebnisse eines langen Bash-Befehls in einer Datei festzuhalten.

Kann die Datei, die ich mit tee ausgebe, jeder Zeile irgendwie den Zeitstempel voranstellen, wann die Zeile geschrieben wurde? Ich suche nach einer Lösung, bei der jede Zeile einen anderen Datums-/Uhrzeitwert hat ... nicht den gleichen Wert, der jeder Zeile vorangestellt wird.

Der Grund, warum ich dies möchte, ist, dass es sehr nützlich wäre, zu wissen, wann jede Zeile später ausgegeben wurde, wenn ich die Datei durchlese, um zu verstehen, wo die langsamen Bereiche waren.

Antwort1

Wenn tee etwas nicht tun kann, leiten Sie es an ein Programm weiter, das es kann.mehrutilshat ein Tool namens, tsdessen Zweck genau dieser ist:

$ Echotest | ts
02. Februar 13:17:27 Test

Wenn Sie einen Zeitstempel wünschenalles, die Verwendung sollte offensichtlich sein:

myapp | ts | tee app.log

Auch andere Kombinationen sind möglich, zum Beispiel um nur die Bildschirmausgabe oder nur die Protokolldatei mit einem Zeitstempel zu versehen:

myapp | tee app.log | ts
myapp | tee >(ts > app.log)
myapp | tee /dev/tty | ts > app.log
myapp | pee "ts > app.log" "cat"
myapp | pee "cat > app.log" "ts"

(Ja, das Letzte ist auch von moreutils.)

Antwort2

Eine Alternative zu ts:

echo "foo" | stdbuf -o0 sed 's/%/%%/g' | xargs -d '\n' -I {} date '+%F %T {}' | tee -a "/tmp/foo.log"

Ausgabe:

# cat "/tmp/foo.log"
2022-02-24 09:43:00 foo

Beispiel zum Protokollieren von stdout und stderr in eine Datei (entfernen, /dev/nullum auch ins Terminal zu schreiben):

exec &> >(stdbuf -o0 sed 's/%/%%/g' | xargs -d '\n' -I {} date '+%F %T {}' | tee -a "/tmp/std.log" >/dev/null )

Eine weitere Alternative durch Verwendung von awk:

echo "foo" | xargs -d'\n' -I{} echo '{}' | awk '{ print strftime("%F %T"), $0; fflush(); }' | tee -a "/tmp/foo.log"

verwandte Informationen