How to get the elapsed time in milliseconds in a bash script? How to get the elapsed time in milliseconds in a bash script? bash bash

How to get the elapsed time in milliseconds in a bash script?


The date command you're using doesn't support %N so your output is literally 1292460931N. I tried it on Linux and it worked, but on FreeBSD I see the results you got. Run that date command in a shell and see what comes out. Is it possible you're using busybox? Its cut-down date command also omits %N but the version I just tried gave me 1292463535%N.


Okay, a couple of things here.

First, not a lot of systems can give you a time that actually accurate to nanoseconds anyway.

Now, using time, either as /usr/bin/time or the shell builtin (bash: help time) is very easy. If the command you want to time is foo1, then

$ time foo

will return the elapsed time as three lines on stderr

real 0m0.001suser 0m0.000ssys  0m0.000s

which you can use any way you like.

If you want to get a better, more accurate timing, execute the command many times. This can be as simple as writing a short loop

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

will do foo five times and give you the total time. You probably want to do more than 5 iterations, so you'd probably want a counter and a while loop or the like.