it-swarm.com.de

Erstellen Sie eine Zeitstempelvariable im Bash-Skript

Ich versuche, eine Zeitstempelvariable in einem Shell-Skript zu erstellen, um die Protokollierung ein wenig zu vereinfachen. Ich möchte die Variable am Anfang des Skripts erstellen und die aktuelle Uhrzeit jedes Mal ausdrucken lassen, wenn ich echo $timestamp ausstelle. Es stellte sich als schwieriger heraus, als ich dachte. Hier sind einige Dinge, die ich ausprobiert habe:

timestamp="(date +"%T")" Echo druckt (date +"%T") aus

timestamp="$(date +"%T")" Echo gibt die Zeit aus, zu der die Variable initialisiert wurde.

Andere Dinge, die ich ausprobiert habe, sind nur leichte Variationen, die nicht besser funktionierten. Weiß jemand, wie man erreicht, was ich versuche zu tun?

322
Dan

Um den aktuellen Zeitstempel und nicht den Zeitpunkt zu ermitteln, zu dem eine feste Variable definiert ist, besteht der Trick darin, eine Funktion und keine Variable zu verwenden:

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T"
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

Wenn Ihnen das vom %T -Spezifizierer angegebene Format nicht gefällt, können Sie die anderen von date akzeptierten Zeitkonvertierungsspezifizierer kombinieren. Für GNU date finden Sie die 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

261
giordano

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

timestamp=$(date +%s)

%T gibt dir genau die Zeit; wie %H:%M:%S (via http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ )

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

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
48

Das ISO 8601-Format (2018-12-23T12:34:56) ist lesbarer als der UNIX-Zeitstempel. Auf einigen Betriebssystemen können die Dateinamen jedoch nicht : enthalten. Daher empfehle ich stattdessen so etwas zu verwenden:

2018-12-23_12-34-56

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

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

Dies ist das Format, das ich in vielen Anwendungen gesehen habe. Eine weitere nette Sache dabei ist, dass, wenn Ihre Dateinamen damit beginnen, Sie sie alphabetisch sortieren können und sie nach Datum sortiert würden.

26
Caner

Verwenden Sie die Befehlssubstitution:

timestamp=$( date +%T )
15
choroba

Ich benutze Ubuntu 14.04.

Der korrekte Weg in meinem System sollte date +%s sein.

Die Ausgabe von date +%T ist wie 12:25:25.

12
Sean Lin

Sie können verwenden

timestamp=`date --rfc-3339=seconds`

Dies liefert im Format 2014-02-01 15:12:35-05:00

Die Back-Tick-Zeichen (`) bewirken, dass das, was sich zwischen ihnen befindet, ausgewertet wird und das Ergebnis in die Zeile aufgenommen wird. date --help hat andere Optionen.

9
Bill

Aktuelle Versionen von bash erfordern keinen Aufruf des externen Programms date:

printf -v timestamp '%(%T)T'

%(...)T verwendet das entsprechende Argument als UNIX-Zeitstempel und formatiert es gemäß dem Format strftime in Klammern. Ein Argument von -1 entspricht der aktuellen Zeit, und wenn keine Mehrdeutigkeit auftreten würde, kann es weggelassen werden.

3
chepner
timestamp=$(awk 'BEGIN {srand(); print srand()}')

srand ohne Wert verwendet den aktuellen Zeitstempel bei den meisten Awk-Implementierungen.

1
Steven Penny