Maak tijdstempelvariabele in bash-script

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 $timestampuitgeef. 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 datezijn geaccepteerd. Voor GNU datekun 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)

%Tgeeft 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 +%smoeten zijn.

De uitvoer van date +%Tis 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 --helpheeft andere opties.


Antwoord 9, autoriteit 2%

Recente versies van bashvereisen geen aanroep van het externe programma date:

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

%(...)Tgebruikt het corresponderende argument als een UNIX-tijdstempel en formatteert het volgens het strftime-achtige formaat tussen de haakjes. Een argument van -1komt 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.

Other episodes