/usr/bin/time --format 输出经过的时间,以毫秒为单位

Posted

技术标签:

【中文标题】/usr/bin/time --format 输出经过的时间,以毫秒为单位【英文标题】:/usr/bin/time --format output elapsed time in milliseconds 【发布时间】:2013-06-02 07:10:27 【问题描述】:

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

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

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

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

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

【问题讨论】:

手册页对此一无所知。所以我假设不可能使用 unchanged 版本的时间。应该可以为输出格式制作补丁,但我不知道是否有可能获得更高的准确性。 只是为未来的读者指出TIMEFORMAT 变量用于控制内置time 命令的输出。更改它没有任何风险。 对 shell 的更改也只会影响该 shell。 【参考方案1】:

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

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

%Nshould return nanoseconds,1 毫秒是 1000000 纳秒,因此除法将返回执行 my_command 所需的时间(以毫秒为单位)。

注意%Nis not supported on all systems, but most of them.

【讨论】:

优秀,接受!没想到约会,但这已经足够了!但是,要从纳秒到毫秒,您必须除以 1000000: ts=$(date +%s%N) ;睡觉 1; tt=$((($(日期 +%s%N) - $ts)/1000000)) ;回声$tt 对于那些在 OSX 上没有所需时间分辨率的用户,可以用 gdate 替换本地日期。例如:brew install coreutils 如果需要,然后是 ts=$(gdate +%s%N) ; sleep 1 ; tt=$((($(gdate +%s%N) - $ts)/1000000)) ; echo $tt source 您可以在具有 %N 的系统上使用 %3N 来获得毫秒数。见https://serverfault.com/a/588705/432437【参考方案2】:

为方便起见,我将 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

附:如果我有代表,这将是一条评论。

【讨论】:

要允许my_command 有参数,您可能需要将提供的命令括在引号中:"$@"【参考方案3】:

在这个帖子中有几件事让人感到困惑。

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

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

【讨论】:

以上是关于/usr/bin/time --format 输出经过的时间,以毫秒为单位的主要内容,如果未能解决你的问题,请参考以下文章

获取输出到 /dev/null 的命令的执行时间

在 bash 脚本中将 SSH 输出捕获为变量

使用 time 统计程序最大内存

使用 time 统计程序最大内存

使用 time 统计程序最大内存

使用 time 统计程序最大内存