2010-12-16 32 views
9

He intentado utilizar "t1 = $ (% s% N fecha +)" para obtener la hora en nanosegundos, pero me quedé en conseguir este error:¿Cómo obtener el tiempo transcurrido en milisegundos en el script bash?

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

Miré hacia arriba en línea y parece que pueda utilice el comando "tiempo", sin embargo, no puedo encontrar un buen ejemplo de uso del comando de tiempo. Cualquier ayuda sería apreciada :)

+1

¿Estás tratando de obtener el tiempo que tu script tardó en ejecutarse o el tiempo que algo en tu script tomó para ejecutarse? – JonMR

+1

algo en mi secuencia de comandos –

Respuesta

2

Bien, un par de cosas aquí.

En primer lugar, no muchos sistemas le pueden dar un tiempo realmente preciso de nanosegundos de todos modos.

Ahora, usando el tiempo, ya sea como /usr/bin/time o como shell builtin (bash: help time) es muy fácil. Si el comando que desea el tiempo es foo1, entonces

$ time foo 

devolverá el tiempo transcurrido como tres líneas en stderr

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

que se puede utilizar cualquier forma que desee.

Si desea obtener un tiempo mejor y más preciso, ejecute el comando muchas veces. Esto puede ser tan simple como escribir un bucle corto

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

hará foo cinco veces y le dará el tiempo total. Probablemente quieras hacer más de 5 iteraciones, por lo que probablemente quieras un contador y un ciclo while o similar.

+0

@Tony: Puede controlar la salida del tiempo incorporado de Bash usando la variable 'TIMEFORMAT' o'/usr/bin/time' usando la opción '-f'. Ver 'man bash' o' man time'. –

5

El comando date que está utilizando no es compatible con %N por lo que su salida es literalmente 1292460931N. Lo probé en Linux y funcionó, pero en FreeBSD veo los resultados que obtuviste. Ejecute ese comando de fecha en un shell y vea lo que sale. ¿Es posible que esté usando busybox? Su comando de fecha de corte también omite %N pero la versión que acabo de probar me dio 1292463535%N.

+0

¿conoces otras formas de obtener milisegundos de granularidad? –

+1

@Tony Sí, puede compilar un programa C que llame a 'getitimer()' y 'setitimer()' y use su secuencia de comandos para invocar eso. – SiegeX

Cuestiones relacionadas