Créer une variable d'horodatage dans le script bash

J'essaie de créer une variable d'horodatage dans un script shell pour rendre la journalisation un peu plus facile. Je veux créer la variable au début du script et imprimer l'heure actuelle chaque fois que j'en question echo $timestamp. Il se révèle être plus difficile que je pensais. Voici quelques choses que j'ai essayées:

timestamp="(date +"%T")" echo affiche (date +"%T")

timestamp="$(date +"%T")" echo affiche l'heure à laquelle la variable a été initialisée.

D'autres choses que j'ai essayées sont juste de légères variations qui n'ont pas mieux. Est-ce que quelqu'un sait comment accomplir ce que j'essaie de faire?

258
demandé sur fedorqui 2013-06-12 17:03:33

8 réponses

Pour obtenir le timestamp actuel et pas le temps de lorsqu'une variable est définie, l'astuce est d'utiliser une fonction et pas une variable:

#!/bin/bash

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

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

Si vous n'aimez pas le format donné par le spécificateur %T, vous pouvez combiner les autres spécificateurs de conversion de temps acceptés par date. Pour GNU date, Vous pouvez trouver la liste complète de ces spécificateurs dans la documentation officielle ici: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

212
répondu giordano 2014-06-02 22:43:29

Si vous voulez obtenir un horodatage unix, vous devez utiliser:

timestamp=$(date +%s)

%T vous donner le temps; de même que %H:%M:%S (via http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)

417
répondu dchakarov 2013-11-13 13:01:01
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
30
répondu Girdhar Singh Rathore 2017-07-23 17:21:57

Utiliser la substitution de commande:

timestamp=$( date +%T )
12
répondu choroba 2013-06-12 13:06:11

Vous pouvez utiliser

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

Cela délivre dans le format 2014-02-01 15:12:35-05:00

Les caractères de back-tick (`) feront en sorte que ce qui se trouve entre eux soit évalué et que le résultat soit inclus dans la ligne. date --help a d'autres options.

9
répondu Bill 2016-04-20 21:07:36

Le format ISO 8601 (2018-12-23T12:34:56) est plus lisible que L'horodatage UNIX. Cependant, sur certains os, vous ne pouvez pas avoir : dans les noms de fichiers. Par conséquent, je recommande d'utiliser quelque chose comme ceci à la place:

2018-12-23_12-34-56

Vous pouvez utiliser la commande suivante pour obtenir l'horodatage dans ce format:

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

C'est le format que j'ai vu de nombreuses applications utilisent. Une autre bonne chose à ce sujet est que si vos noms de fichiers commencent par cela, vous pouvez les Trier par ordre alphabétique et ils seraient triés par date.

6
répondu Caner 2018-04-10 12:25:22

J'utilise ubuntu 14.04.

La façon correcte dans mon système devrait être date +%s.

La sortie de date +%T est comme 12:25:25.

5
répondu Sean Lin 2018-01-27 04:26:33
timestamp=$(awk 'BEGIN {srand(); print srand()}')

Srand sans valeur utilise l'horodatage actuel avec la plupart des implémentations Awk.

1
répondu Steven Penny 2016-12-28 02:15:34