Mac OS X Shell 脚本测量经过的时间

6

我该如何在Mac OS X的shell脚本中以毫秒为单位测量经过的时间?


可能是在bash脚本中使用time命令的重复问题。 - Paul R
3个回答

16

使用time命令(manpage)比仅调用ruby获取经过时间要便宜得多:

$ time a_command

要从命令中“提取”实时时间(未经测试):

real_time=$(time a_command | grep ^real | awk 'print $2')

(其中如果必要的话,a_command 可以是一个shell函数)

这将返回分钟和秒数的值,所以如果你想要毫秒级的结果,则可以使用Python(或您最喜欢的脚本语言)在子进程调用的外部运行带有计时函数的进程,并且不会在获取当前时间时产生 成本 调用脚本语言。 请参见此答案此答案了解详情。


我可以在shell中如何做到这一点?我想要获取“真实”的结果,你能详细解释一下吗? - C. Porto

3

您可以使用:

start_ms=$(ruby -e 'puts (Time.now.to_f * 1000).to_i')
# do some work
end_ms=$(ruby -e 'puts (Time.now.to_f * 1000).to_i')
elapsed_ms=$((end_ms - start_ms))
echo "$elapsed_ms ms passed"

或者仅使用shell内置命令(在bash和zsh中都适用):

start_ns=$(date +%s%N)
# do some work
end_ns=$(date +%s%N)
elapsed_ms=$(((end_ns - start_ns) / 1000000))

1
谢谢,我会使用Ruby方法,因为我正在使用Mac OS X操作系统,第二种方法实际上不起作用,但我很好奇是否有一种本地测量毫秒的方法。 - C. Porto
1
我已经更新了我的答案,你可以使用第二种方法来仅使用shell测量时间间隔。 - Victor Dodon

0
在您的主要shell脚本中计算代码执行
START=$(date +%s) 

//you script like flutter build ipa

END=$(date +%s)
DIFF=$(echo "$END - $START" | bc)
echo "whole process finished in $DIFF seconds"

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