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?
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
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/)
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
Utiliser la substitution de commande:
timestamp=$( date +%T )
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.
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.
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
.
timestamp=$(awk 'BEGIN {srand(); print srand()}')
Srand sans valeur utilise l'horodatage actuel avec la plupart des implémentations Awk.