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)
该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,运行命令,然后进行减法以计算经过的时间并将其格式化为毫秒。
在我的测试中,它们似乎都产生了相同的结果。