web-dev-qa-db-fra.com

Mesurer le temps d'exécution d'une commande en millisecondes

J'utilise Ubuntu 18.04 et je suis nouveau pour Ubuntu et Linux en général. J'essaie de mesurer le temps d'exécution d'une commande à la milliseconde près. J'aimerais également ajouter cette heure à un fichier, car je le fais souvent dans une boucle for. Enfin, j'aimerais avoir la syntaxe la plus simple et la plus lisible.

Longue histoire courte: j'aimerais que la commande /usr/bin/time renvoie un résultat précis à la milliseconde près.

J'ai lu d'autres discussions mentionnant une variable d'environnement de format d'heure, mais jamais comment la modifier.

Merci d'avance pour l'aide.

EDIT: Tenant compte de toutes les réponses, la solution ressemblait à quelque chose comme:

#!/bin/bash  
ts=$(date +%s%N)  
command  
echo "formatting $((($(date +%s%N) - $ts)/1000000)) formatting" >> file_to_append_time_to  
4
user877529

La commande timen'est pas capable de le faire directement. Il génère une heure au format fractionnaire, de sorte qu'il peut être ré-analysé en millisecondes en multipliant par 1000:

$ time sleep 1s
> real    0m1.006s
$ echo '1.006 * 1000' | bc
> 1006.000

Cela signifie que vous pouvez créer une commande qui le fait via:

{ time $@ ; } |& grep real | sed -E 's/[^0-9\.]+//g' | tr -d '\n' | (cat && echo " * 1000") | bc

Il s’agit essentiellement d’analyser la sortie de timeet de la multiplier par 1 000. C’est un gâchis parce que, bien, bash.

Ce script utilisateur Infineight posté sur Stack Overflow :

#!/bin/bash
ts=$(date +%s%N)
$@
echo $((($(date +%s%N) - $ts)/1000000))

Cela (je l’ai développé pour plus de lisibilité) enregistre le timestamp actuel de la nanoseconde de datename__, exécute la commande, puis effectue une soustraction pour calculer le temps écoulé et le formate en millisecondes.

Lors de mes tests, ils semblaient tous deux donner les mêmes résultats.

4
Kristopher Ives