36

我使用 /usr/bin/time 程序来测量命令的时间。使用 --format 参数我可以格​​式化输出。例如

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

有没有办法输出更高的经过秒数?还是只输出毫秒,而不是秒?

在 /usr/bin/time 的手册中,它只说了几秒钟,但也许有办法,有人可以帮助我......谢谢!

编辑:我知道使用环境变量“TIMEFORMAT”格式的bash命令“time”。抱歉,但我不想改变那个 env-var... 对我来说似乎有风险,解决方案应该是根本不会改变正在运行的系统的东西:)

4

3 回答 3

46

一种可能性是使用以下date命令:

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

%N 应该返回nanoseconds,并且 1 毫秒是 1000000 纳秒,因此除法将返回以my_command毫秒为单位的执行时间。

请注意%N 并非所有系统都支持,但大多数系统都支持。

于 2013-06-06T11:33:11.560 回答
8

为方便起见,我将 devnull 的答案写成脚本(我将其命名为毫秒时间)。

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

我把脚本放在/usr/local/bin.
赋予它执行权chmod +x /usr/local/bin/millisecond-time
现在我可以像这样使用它:millisecond-time my_command

Ps 如果我有代表,这将是一个评论。

于 2017-01-23T11:10:38.693 回答
1

在这个线程中有几件事令人困惑。

Bash 有一个内置time命令,它支持一个TIMEFORMAT环境变量,可以让你格式化输出。有关此运行的详细信息man bash并搜索TIMEFORMAT.

还有一个标准的/usr/bin/time命令行实用程序,它支持一个TIME环境变量,可以让您格式化输出(或者您可以在命令行上使用-f或)。--format有关此运行的详细信息man time并搜索TIME.

如果您想要命令运行所花费的秒数,您可以使用内置的 bash 命令(它支持小数点后三位的最大精度):

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

或者您可以使用命令行实用程序(支持最大两位小数的精度):

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

如上所述,这些变量都没有被其他任何东西使用并且可以安全地更改。

于 2021-01-08T02:18:46.483 回答