I use the /usr/bin/time program to measure the time for a command. with the --format parameter i can format the output. e.g.

/usr/bin/time -f "%e" ls

is there a way to output a bigger accuracy of the elapsed seconds? or just output milliseconds, not seconds?

In the manual of /usr/bin/time it only says something about seconds, but maybe there is a way and someone can help me... thanks!

EDIT: I know about the bash command "time" which uses the format of the environment variable "TIMEFORMAT". sorry, but i don't wanna change that env-var... seems to risky to me, solution should be something that doesn't change the running system at all :)

有帮助吗?

解决方案

One possibility is to use the date command:

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

%N should return nanoseconds, and 1 millisecond is 1000000 nanosecond, hence by division would return the time taken to execute my_command in milliseconds.

NOTE that the %N is not supported on all systems, but most of them.

其他提示

For convenience I made devnull's answer into a script (I named it millisecond-time).

#!/bin/bash
ts=$(date +%s%N) ; $@ ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

I put the script in /usr/local/bin.
Gave it execute rights chmod +x /usr/local/bin/millisecond-time.
Now I can use it like this: millisecond-time my_command

P.s. This would be a comment if I had the rep'.

There are a couple of things getting confused in this thread.

Bash has a built-in time command which supports a TIMEFORMAT environment variable that will let you format the output. For details on this run man bash and search for TIMEFORMAT.

There is also a standard /usr/bin/time command-line utility which supports a TIME environment variable that will let you format the output (or you can use -f or --format on the command line). For details on this run man time and search for TIME.

If you want the number of seconds the command took to run you can either use the built-in bash command (which supports a maximum precision of three decimal places):

bash# export TIMEFORMAT="%3lR" 
bash# time find /etc > /dev/null
0m0.015s

Or you can use the command-line utility (which supports a maximum precision of two decimal places):

shell# export TIME="%E"
shell# /usr/bin/time find /opt/ > /dev/null
0:00.72

As mentioned above neither of these variables are used by anything else and are safe to change.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top