Vermeiden Sie Gabeln!!!
Es ist übertrieben, date
für jede protokollierte Zeile auszuführen!!
Verwenden Sie wann immer möglich die integrierten Funktionen von bash.
AKTUALISIERUNG 2023
Zur Zeit, als diese Frage gestellt wurde, war die bash-Version bash-4.2.
In dieser Version ist der reine bash-Weg zum Drucken der aktuellen Zeit:
printf '%(%T)T\n' -1
oder
printf '%(%T)T\n' -1
Ein kurze Funktion zum Protokollieren jeder Zeile mit Zeitstempel könnte sein:
logLine() {
printf '%(%T)T %s\n' -1 "$*"
}
Dann
$ logLine Hallo Welt.
10:11:32 Hallo Welt.
Um eine Variable festzulegen, verwenden Sie:
printf -v varname '%(%T)T' -1
oder um den UNIX EPOCH zu erhalten:
printf -v varname '%(%s)T' -1
Dann
printf 'Gespeicherter Zeitstempel ist: %(%c)T\n' "$varname"
Gespeicherter Zeitstempel ist: Sat Jan 27 04:26:00 2018
Heute verwende ich bash >= 5.1.4...
Ab Version 5.0-alpha von bash, (2018-05-22):
b. Es gibt eine Variable EPOCHSECONDS, die sich auf die Zeit in Sekunden seit dem Unix-Epoche bezieht.
c. Es gibt eine Variable EPOCHREALTIME, die sich auf die Zeit in Sekunden seit der Unix-Epoche mit Mikrosekunden-Genauigkeit bezieht.
Wenn Sie also Mikrosekunden-Genauigkeit verwenden möchten, könnte die Funktion wie folgt aussehen:
logLine() {
local now=$EPOCHREALTIME
printf '%(%T)T.%s %s\n' ${now%.*} ${now#*.} "$*"
}
Dann
$ logLine Hallo Welt.
10:15:56.862732 Hallo Welt.
Wichtig: Siehe: Mischen Sie nicht EPOCHREALTIME und EPOCHSECONDS!!!