J'ai vérifié cela , mais la solution fournie n'a pas fonctionné pour moi.
En utilisant la date, je peux obtenir le temps d'exécution en secondes:
T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"
Cependant, quand j'essaye ceci:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
L'ajout de% N (comme ci-dessus) à la date pour obtenir la précision en nanosecondes, j'obtiens l'erreur suivante: -bash: 1369320760N: valeur trop grande pour la base (le jeton d'erreur est "1369320760N")
Quelqu'un sait-il comment mesurer le temps d'exécution en millisecondes en utilisant bash sous Mac OS X?
# some work here
ommited, j'obtiens des temps de 0,2 à 0,3 sec - ce qui devrait être zéro (ou au moins constant) pour atteindre votre objectif. Alors que/usr/bin/time usleep 50000
donne un temps stable raisonnablement de 0,05 +/- 0,01 sec. (Testé uniquement sous Linux, je ne sais pas si / usr / bin / time et / ou usleep est disponible sur OSX.)Réponses:
Puisque OSX est un système BSD, sa bibliothèque strftime n'en a pas
%N
( http://www.freebsd.org/cgi/man.cgi?query=date )La
time
commande bash builtin vous donne- t-elle les informations dont vous avez besoin?la source
J'irais dans cette voie si j'avais besoin de millisecondes et que BSD ne supportait pas la date
+%s%N
la source
echo $(($(date +%s%N)/1000000))
Cela convertirait des nano-secondes en milli-secondes.De @mpy,
date +%s.%N
fonctionne.La sortie est différente entre linux et OS X:
linux:
1369322592.573787111
OS X:
1369322610.N
la source
date +%s.%N
(mais je ne peux pas vérifier sur OSX; cela fonctionne sur Linux). Mais le problème est donc quebash
de » à$(( ))
mon humble avis n'est pas en mesure de traiter les nombres à virgule flottante.Si vous installez,
coreutils
vous pouvez utiliser GNU Linuxdate
en écrivantgdate
.coreutils est disponible avec Homebrew:
brew install coreutils
.la source
Comme l'autre réponse l'a mentionné, la date d'OS X ne prend pas en charge% N (nanosecondes).
Pourriez-vous simplement enregistrer les commandes à temps en tant que script? Ou utilisez un sous-shell ou un groupe de commandes pour eux:
Ou additionnez les temps des commandes individuelles:
Ou utilisez un langage de script:
%.3f
est un spécificateur de format pour un nombre à virgule flottante avec 3 décimales. Time.now est une méthode de classe de la classe Time.la source
ruby -e 'puts "%.3f" % Time.now'
,ruby
appelle l'interpréteur ruby,-e
exécute le script qui suit sur la ligne de commande.puts
est rubisprintf
(en quelque sorte),Time
est un objet rubis etTime.now
est la seconde depuis l'époque. L'utilisation%.3f
réduit la sortie à 3 décimales, ce qui correspond à des millisecondes (les parties ".046" et ".943" de la sortie.)time
s'agit également d'un outil de ligne de commande qui multiplie le temps nécessaire à l'exécution de la commande suivante. Voirman time
pour plus de détails.Glenn a raison,
time
c'est la commande que vous recherchez, mais pour analyser les informations que vous souhaitez, vous devrez les transmettre à un autre processeur commesed
.time command-goes-here >/dev/null 2>$1|sed rules-go-here
Cette commande supprimera la sortie de la commande elle-même (en envoyant les sorties standard et d'erreur à / dev / null), et passera les résultats temporels à sed, où vous devrez choisir les règles appropriées pour éditer le flux et produire la valeur souhaitée.
la source