Ik probeer een tijdstempelvariabele in een shellscript te maken om het loggen wat gemakkelijker te maken. Ik wil de variabele aan het begin van het script maken en de huidige tijd laten afdrukken wanneer ik echo $timestamp
uitgeef. Het blijkt moeilijker dan ik dacht. Hier zijn enkele dingen die ik heb geprobeerd:
timestamp="(date +"%T")"
echo drukt (date +"%T")
af
timestamp="$(date +"%T")"
echo drukt de tijd af waarop de variabele werd geïnitialiseerd.
Andere dingen die ik heb geprobeerd, zijn slechts kleine variaties die niet beter werkten. Weet iemand hoe ik kan bereiken wat ik probeer te doen?
Antwoord 1, autoriteit 100%
Om de huidige tijdstempel te krijgen en niet de tijd waarop een vaste variabele is gedefinieerd, is de truc om een functie te gebruiken en nieteen variabele:
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T" # current time
}
# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...
Als je het formaat van de %T
-specificatie niet leuk vindt, kun je de andere tijdconversie-specificaties combineren die op date
zijn geaccepteerd. Voor GNU date
kun je de volledige lijst van deze specificaties in de officiële documentatie hier vinden: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers
Antwoord 2, autoriteit 91%
Als je een Unix-tijdstempel wilt krijgen, moet je het volgende gebruiken:
timestamp=$(date +%s)
%T
geeft u precies de tijd; Hetzelfde als %H:%M:%S
(via http://www.cyberciti.biz/faq/linux-unix-formating-dates-for-display/ )
Antwoord 3, Autoriteit 22%
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
Antwoord 4, Autoriteit 16%
ISO 8601-indeling (2018-12-23T12:34:56
) is leesbaarder dan UNIX-tijdstempel. Op sommige Oss kun je echter niet :
in de bestandsnamen hebben. Daarom raad ik aan om iets dergelijks te gebruiken in plaats daarvan:
2018-12-23_12-34-56
U kunt de volgende opdracht gebruiken om de tijdstempel in dit formaat te krijgen:
TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`
Dit is het formaat dat ik veel toepassingen heb gezien. Nog een leuk ding hierover is dat als uw bestandsnamen hiermee beginnen, u ze alfabetisch kunt sorteren en ze zouden op datum worden gesorteerd.
Antwoord 5, Autoriteit 7%
en voor mijn collega-Europeanen, probeer dit te gebruiken:
timestamp=$(date +%d-%m-%Y_%H-%M-%S)
geeft een indeling van het formaat: “15-02-2020_19-21-58”
u belt de variabele en ontvang de reekstrepresentatie zoals deze
$timestamp
Antwoord 6, Autoriteit 5%
Ik gebruik ubuntu 14.04.
De juiste manier in mijn systeem zou date +%s
moeten zijn.
De uitvoer van date +%T
is als 12:25:25
.
Antwoord 7, autoriteit 5%
Gebruik opdrachtvervanging:
timestamp=$( date +%T )
Antwoord 8, autoriteit 4%
U kunt gebruiken
timestamp=`date --rfc-3339=seconds`
Dit levert in het formaat 2014-02-01 15:12:35-05:00
De back-tick (`
) tekens zorgen ervoor dat wat er tussen staat wordt geëvalueerd en dat het resultaat in de regel wordt opgenomen. date --help
heeft andere opties.
Antwoord 9, autoriteit 2%
Recente versies van bash
vereisen geen aanroep van het externe programma date
:
printf -v timestamp '%(%T)T'
%(...)T
gebruikt het corresponderende argument als een UNIX-tijdstempel en formatteert het volgens het strftime
-achtige formaat tussen de haakjes. Een argument van -1
komt overeen met de huidige tijd, en wanneer er geen dubbelzinnigheid zou optreden, kan worden weggelaten.
Antwoord 10, autoriteit 2%
Veel antwoorden maar kon niet vinden wat ik zocht :
date +"%s.%3N"
retourneert zoiets als: 1606297368.210
Antwoord 11
timestamp=$(awk 'BEGIN {srand(); print srand()}')
srand zonder waarde gebruikt de huidige tijdstempel bij de meeste Awk-implementaties.