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?

2voto

carloswm85 Punkte 671

Dies ist etwas mehr als das, was Sie gefragt haben, also können Sie es an Ihre Bedürfnisse anpassen.

Ich versuche, eine Zeitstempelvariable in einem Shell-Skript zu erstellen...

Dieses Skript ermöglicht es Ihnen, eine Variable zu erstellen. Ich bin mir jedoch nicht ganz sicher, wie wiederverwendbar sie ist, wenn sich der Shell-Kontext ändert. Aber es wird seinen Job erledigen.

function timestamp {
    TEXT="Datum:"
    DATE=`date +%Y-%m-%d`
    TIME=`date +%H:%M:%S`
    ZONE=`date +"%Z %z"`
    echo $TEXT $DATE $TIME $ZONE
}

function fulldate {
  timevariable=$(timestamp)
  echo $timevariable
}

echo "- Ausgabe 1:"
timestamp
echo "- Ausgabe 2:"
fulldate
echo "- Ausgabe 3:"
echo $timevariable

Ausgaben:

- Ausgabe 1:
Datum: 2021-08-12 23:28:08 UTC +0000
- Ausgabe 2:
Datum: 2021-08-12 23:28:08 UTC +0000
- Ausgabe 3:
Datum: 2021-08-12 23:28:08 UTC +0000

Ich habe dies auf GNU bash, Version 4.4.23(1)-Release (x86_64-pc-msys) getestet.

2voto

pamphlet Punkte 1930

Wenn die Leistung ein Anliegen ist, ist @chepners Antwort ein klarer Gewinner.

Mit etwas mehr Komplexität können Sie auch Mikro- oder Millisekunden-Genauigkeit nur mit Bash-Built-Ins erhalten. Hier ist ein Beispiel für eine Funktion, die den aktuellen Zeitstempel einschließlich Millisekunden ausgibt:

timestamp() {
    IFS=. read S US <<<$EPOCHREALTIME # Epoch-Sekunden/Mikrosekunden lesen
    MS=$((10#$US/1000)) # In Millisekunden umwandeln (interpretieren als Basis-10, auch mit führenden 0)
    printf '%(%F %T)T.%03i' $S $MS # Formatierter Zeitstempel ausgeben
}

TS=$(timestamp) # Funktion aufrufen, Zuweisung an Variable

Beachten Sie, dass das printf-Format angepasst werden kann, um Ihr bevorzugtes Datum-/Zeitformat auszugeben.

-1voto

ThomasHaz Punkte 517

Das Folgende gibt das lokale Datum und die lokale Uhrzeit an - es erfordert jedoch Internetzugang. Je nachdem, was protokolliert wird, könnte dies vorteilhaft sein - Überwachung und Protokollierung des Verbindungsstatus?

curl -i --silent https://google.com/ 2>&1 | grep date

date: Fri, 03 Jun 2022 17:39:19 GMT

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