以毫秒为单位测量命令的执行时间

use*_*529 7 command-line time bash

我正在运行 Ubuntu 18.04,并且一般来说是 Ubuntu 和 Linux 的新手。我正在尝试将命令的执行时间测量到毫秒。我还想将此时间附加到文件中,因为我在 for 循环中多次执行此操作。最后,我想拥有最简单易读的语法。

长话短说:我希望/usr/bin/time命令返回精确到毫秒的结果。

我读过其他线程提到时间格式环境变量,但从未读过如何修改它。

在此先感谢您的帮助。

编辑:考虑到所有答案,解决方案类似于

#!/bin/bash  
ts=$(date +%s%N)  
command  
echo "formatting $((($(date +%s%N) - $ts)/1000000)) formatting" >> file_to_append_time_to  
Run Code Online (Sandbox Code Playgroud)

Kri*_*ves 6

time命令本身是不能够直接这样做的。它确实以小数格式输出时间,因此可以通过乘以 1000 将其解析回毫秒:

$ time sleep 1s
> real    0m1.006s
$ echo '1.006 * 1000' | bc
> 1006.000
Run Code Online (Sandbox Code Playgroud)

这意味着您可以通过以下方式创建一个命令:

{ time $@ ; } |& grep real | sed -E 's/[^0-9\.]+//g' | tr -d '\n' | (cat && echo " * 1000") | bc
Run Code Online (Sandbox Code Playgroud)

这基本上是解析输出time并将其乘以 1000。这是一团糟,因为,嗯,bash。

这个脚本用户 Infineight发布在 Stack Overflow 上可能更好/更有用:

#!/bin/bash
ts=$(date +%s%N)
$@
echo $((($(date +%s%N) - $ts)/1000000))
Run Code Online (Sandbox Code Playgroud)

这(为了可读性我已经扩展了它)从 保存当前的纳秒时间戳date,运行命令,然后进行减法以计算经过的时间并将其格式化为毫秒。

在我的测试中,它们似乎都产生了相同的结果。