2010-12-16 179 views
9

J'ai essayé d'utiliser « t1 = $ (date +% s% N) » pour obtenir le temps en nanosecondes, mais je gardé à obtenir cette erreur:Comment obtenir le temps écoulé en millisecondes dans le script bash?

./script.sh: line 10: 1292460931N: value too great for base (error token is "1292460931N") 

J'ai regardé en ligne et il semble que vous pouvez utilisez la commande "time", mais je ne trouve pas un bon exemple d'utilisation de la commande time. Toute aide serait appréciée :)

+1

Etes-vous en train d'essayer d'obtenir le temps nécessaire à l'exécution de votre script ou à l'exécution de votre script? – JonMR

+1

quelque chose dans mon script –

Répondre

2

Bon, un certain nombre de choses ici. Tout d'abord, pas beaucoup de systèmes peuvent vous donner un temps précis à nanosecondes de toute façon. Maintenant, en utilisant l'heure, /usr/bin/time ou le shell intégré (bash: help time) est très facile. Si la commande que vous voulez le temps est foo1, puis

$ time foo 

renvoie le temps écoulé que trois lignes sur stderr

real 0m0.001s 
user 0m0.000s 
sys 0m0.000s 

que vous pouvez utiliser comme bon vous semble.

Si vous souhaitez obtenir un meilleur timing plus précis, exécutez la commande plusieurs fois. Cela peut être aussi simple que d'écrire une courte boucle

time for i in 0 1 2 3 4; do foo; done 

fera foo cinq fois et vous donner le temps total. Vous voulez probablement faire plus de 5 itérations, donc vous voudrez probablement un compteur et une boucle while ou similaire.

+0

@Tony: Vous pouvez contrôler la sortie de 'built' de Bash en utilisant la variable' TIMEFORMAT' ou '/ usr/bin/time' en utilisant l'option' -f'. Voir 'man bash' ou' man time'. –

5

La commande date que vous utilisez ne prend pas en charge %N donc votre sortie est littéralement 1292460931N. Je l'ai essayé sur Linux et ça a marché, mais sur FreeBSD je vois les résultats que vous avez obtenus. Exécutez cette commande date dans un shell et voir ce qui sort. Est-il possible que vous utilisiez busybox? Sa commande de date de coupure omet également %N mais la version que j'ai juste essayée m'a donné 1292463535%N.

+0

savez-vous d'autres façons d'obtenir la granularité millisecondes? –

+1

@Tony Oui, vous pouvez compiler un programme C qui appelle 'getitimer()' et 'setitimer()' et utilisez votre script pour l'appeler. – SiegeX