625 Stimmen

Erstellen Sie eine Zeitstempelvariable im Bash-Skript

Ich versuche, eine Zeitstempelvariable in einem Shell-Skript zu erstellen, um das Protokollieren etwas einfacher zu machen. Ich möchte die Variable am Anfang des Skripts erstellen und möchte, dass sie die aktuelle Zeit ausgibt, wann immer ich echo $timestamp verwende. Es ist schwieriger als ich dachte. Hier sind einige Dinge, die ich ausprobiert habe:

timestamp="(date +"%T")" echo gibt (date +"%T") aus

timestamp="$(date +"%T")" echo gibt die Zeit aus, als die Variable initialisiert wurde.

Andere Dinge, die ich ausprobiert habe, waren nur leichte Variationen, die nicht besser funktionierten. Weiß jemand, wie ich erreichen kann, was ich versuche zu tun?

809voto

dchakarov Punkte 8340

Wenn Sie den Unix-Zeitstempel erhalten möchten, müssen Sie Folgendes verwenden:

timestamp=$(date +%s)

%T gibt Ihnen nur die Zeit; das gleiche wie %H:%M:%S (über http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)

436voto

giordano Punkte 8077

Um den aktuellen Zeitstempel und nicht die Zeit des Zeitpunkts zu erhalten, an dem eine feste Variable definiert wird, ist der Trick, eine Funktion zu verwenden und nicht eine Variable:

#!/bin/bash

# Definiere eine Zeitstempel-Funktion
timestamp() {
  date +"%T" # aktuelle Uhrzeit
}

# etwas tun...
timestamp # Zeitstempel ausgeben
# etwas anderes tun...
timestamp # einen weiteren Zeitstempel ausgeben
# weitermachen...

Wenn Ihnen das Format des spezifizierten %T nicht gefällt, können Sie die anderen von date akzeptierten Zeitumwandlungsspezifizierer kombinieren. Für GNU date finden Sie eine vollständige Liste dieser Spezifizierer in der offiziellen Dokumentation hier: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

278voto

Instein Punkte 1166

Sie können sich auf die folgende Tabelle beziehen, um Zeitstempel in verschiedenen Formaten zu generieren:

Format / Ergebnis

Befehl

Ausgabe

YYYY-MM-DD

date -I

$(date -I)

YYYY-MM-DD_hh:mm:ss

date +%F_%T

$(date +%F_%T)

YYYYMMDD_hhmmss

date +%Y%m%d_%H%M%S

$(date +%Y%m%d_%H%M%S)

YYYYMMDD_hhmmss (UTC-Version)

date --utc +%Y%m%d_%H%M%SZ

$(date --utc +%Y%m%d_%H%M%SZ)

YYYYMMDD_hhmmss (mit lokaler TZ)

date +%Y%m%d_%H%M%S%Z

$(date +%Y%m%d_%H%M%S%Z)

YYYYMMSShhmmss

date +%Y%m%d%H%M%S

$(date +%Y%m%d%H%M%S)

YYYYMMSShhmmssnnnnnnnnn

date +%Y%m%d%H%M%S%N

$(date +%Y%m%d%H%M%S%N)

YYMMDD_hhmmss

date +%y%m%d_%H%M%S

$(date +%y%m%d_%H%M%S)

Sekunden seit UNIX-Epoche

date +%s

$(date +%s)

Nanosekunden only

date +%N

$(date +%N)

Nanosekunden seit UNIX-Epoche

date +%s%N

$(date +%s%N)

ISO8601 UTC Zeitstempel

date --utc +%FT%TZ

$(date --utc +%FT%TZ)

ISO8601 UTC Zeitstempel + ms

date --utc +%FT%T.%3NZ

$(date --utc +%FT%T.%3NZ)

ISO8601 Lokaler TZ Zeitstempel

date +%FT%T%Z

$(date +%FT%T%Z)

YYYY-MM-DD (Kurzer Tag)

date +%F\(%a\)

$(date +%F\(%a\))

YYYY-MM-DD (Langer Tag)

date +%F\(%A\)

$(date +%F\(%A\))

114voto

DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #füge %3N hinzu, da wir auch Millisekunden möchten

84voto

Caner Punkte 53228

Das ISO 8601 Format (2018-12-23T12:34:56) ist lesbarer als der UNIX-Zeitstempel. Auf manchen Betriebssystemen können jedoch keine : in den Dateinamen verwendet werden. Daher empfehle ich stattdessen etwas wie das hier zu verwenden:

2018-12-23_12-34-56

Sie können den folgenden Befehl verwenden, um den Zeitstempel in diesem Format zu erhalten:

TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`

Dies ist das Format, das ich viele Anwendungen verwenden gesehen habe. Ein weiterer Vorteil ist, dass wenn Ihre Dateinamen mit diesem Format beginnen, Sie sie alphabetisch sortieren und sie nach Datum sortiert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X