/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"
%N
should return nanoseconds,1 毫秒是 1000000 纳秒,因此除法将返回执行 my_command
所需的时间(以毫秒为单位)。
注意%N
is 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 输出经过的时间,以毫秒为单位的主要内容,如果未能解决你的问题,请参考以下文章