Je veux faire un script bash qui mesure l'heure de lancement d'un navigateur pour cela j'utilise un html qui obtient l'horodatage en charge en millisecondes en utilisant JavaScript.
Dans le script shell juste avant d'appeler le navigateur, j'obtiens l'horodatage avec:
date +%s
Le problème est qu'il obtient l'horodatage en secondes, et j'en ai besoin en millisecondes car parfois lorsqu'il est exécuté une deuxième fois, le navigateur démarre en moins d'une seconde et je dois pouvoir mesurer ce temps avec précision en utilisant des millisecondes au lieu de secondes.
Comment puis-je obtenir l'horodatage en millisecondes à partir d'un script bash?
la source
$(($(date +'%s * 1000 + %N / 1000000')))
. Cela n'a toujours pas beaucoup de sens, mais serait plus fiable.%N
n'est pas disponible dans BSD et OS X.echo $(( $(date '+%s%N') / 1000000))
?Avec l'implémentation GNU ou ast-open de
date
(ou busybox 'si construit avec l'FEATURE_DATE_NANO
option activée), j'utiliserais:qui renvoie des millisecondes depuis l'époque Unix.
la source
%3N
que le remplissage à gauche est nécessaire (sans lire les documents. ;-), vous pouvez le fairewhile sleep 0.05; do date +%s%3N; done
, et oui, les zéros nécessaires sont là.%3N
c'est en effet zéro rembourré. De plus, je ne pense pas que votre solution ajouterait des zéros, retardez simplement la réponse.%3N
est bien 0.Dans le cas où quelqu'un utilise d'autres coquilles que
bash
,ksh93
etzsh
a une variable à virgule flottante$SECONDS
si vous en faites unetypeset -F SECONDS
qui peut être pratique pour mesurer le temps avec précision:Depuis la version 4.3.13 (2011)
zsh
a une$EPOCHREALTIME
variable spéciale à virgule flottante dans lezsh/datetime
module:Notez que cela est dérivé des deux entiers (pour les secondes et les nanosecondes) renvoyés par
clock_gettime()
. Sur la plupart des systèmes, c'est plus de précision qu'un seuldouble
nombre à virgule flottante C peut contenir, donc vous perdrez de la précision lorsque vous l'utiliserez dans des expressions arithmétiques (sauf pour les dates des premiers mois de 1970).Pour calculer des différences de temps de haute précision (bien que je doute que vous ayez besoin d'une précision supérieure à la milliseconde), vous pouvez utiliser le
$epochtime
tableau spécial à la place (qui contient les secondes et les nanosecondes comme deux éléments distincts).Depuis la version 5.7 (2018), le
strftime
shell intégré prend également en charge un%N
format nanoseconde à la GNUdate
et a%.
pour spécifier la précision, donc le nombre de millisecondes depuis l'époque peut également être récupéré avec:(ou stocké dans une variable avec
-s var
)la source
Pour éviter les calculs pour obtenir les millisecondes, les interprètes JavaScript en ligne de commande peuvent aider:
Paquets contenant ces interprètes sur Ubuntu Eoan:
la source
Dans bash 5+ il existe une variable avec une granularité de micro-secondes:
$EPOCHREALTIME
.Alors:
Imprime le temps depuis l'époque (1/1/70) en millisecondes.
A défaut, vous devez utiliser la date. Soit la date GNU:
L'une des alternatives répertoriées dans https://serverfault.com/a/423642/465827
Ou
brew install coreutils
pour OS XOu, si tout le reste échoue, compilez (gcc epochInµsec.c) ce programme c (ajustez si nécessaire):
Notez que l'appel à n'importe quel programme externe nécessite du temps pour être lu et chargé à partir du disque, démarré, exécuté et enfin pour imprimer la sortie. Cela prendra plusieurs millisecondes. C'est la précision minimale qui pourrait être obtenue avec n'importe quel outil externe (y compris la date).
la source