/usr/bin/time --format 输出经过的时间(毫秒)

40

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

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

有没有一种方法可以输出更高精度的经过时间,或者只输出毫秒而不是秒?

在/usr/bin/time手册中只提到了关于秒的一些内容,但也许有一种方法,有人可以帮助我...谢谢!

编辑:: 我知道关于bash命令“time”,它使用环境变量“TIMEFORMAT”的格式。抱歉,但我不想更改该环境变量...这似乎对我来说太冒险了,解决方案应该是不改变运行系统的任何东西 :)


这个 man 文档没有提及这一点。因此,我认为如果使用一个“未变更”的 time 版本是不可能的。修改输出格式应该是可能的,但我不知道是否可以获得更高的精度。 - hek2mgl
仅向未来的读者指出,TIMEFORMAT变量仅用于控制内置的time命令的输出。更改它不会带来任何风险。 - David Z
同时,对于 shell 的更改只会影响到该 shell。 - studog
3个回答

51

1
太好了,被接受了!没有考虑日期,但已经足够好了!要将纳秒转换为毫秒,必须除以1000000:ts=$(date +%s%N) ; sleep 1 ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo $tt。 - Preexo
3
对于那些在OSX上没有从日期获得所需时间分辨率的人,可以用gdate替换本机日期。例如:如果需要,brew install coreutils 然后ts=$(gdate +%s%N) ; sleep 1 ; tt=$((($(gdate +%s%N) - $ts)/1000000)) ; echo $tt来源 - snodnipper
您可以在具有 %N 的系统上使用 %3N 以获取毫秒级时间。请参见 https://serverfault.com/a/588705/432437 - studog

11

为了方便起见,我将devnull的答案制作成了一个脚本(我把它命名为millisecond-time)。

#!/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

附注:如果我有足够的声望,这将成为一条评论。


3
为了让 my_command 带有参数,你可能需要用引号将提供的命令括起来:"$@" - Yuriy Nemtsov

2

这个帖子里有几件事情被混淆了。

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

如上所述,这些变量都没有被其他东西使用,因此可以安全更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接