【问题标题】:Mac OS X Shell Script Measure Time ElapsedMac OS X Shell 脚本测量经过的时间
【发布时间】:2014-10-20 13:12:40
【问题描述】:

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

【问题讨论】:

标签: macos shell


【解决方案1】:

使用time 命令 (manpage)。这比调用ruby 只是告诉你经过的时间要便宜得多:

$ time a_command

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

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

(如果需要,a_command 可以是一个 shell 函数)

这将以分钟和秒为单位返回值,因此,如果您希望以毫秒为单位的结果,请使用 python(或您最喜欢的脚本语言)在子流程调用外部使用计时函数运行流程,您将不会产生调用脚本语言只是为了获取当前时间的成本。详情请参阅this answerthis answer

【讨论】:

  • 如何在 shell 中做到这一点?我想具体点“真实”,你能详细说明一下吗?
【解决方案2】:

你可以使用:

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))

【讨论】:

  • 谢谢你,我将使用 ruby​​ 方法,因为我使用的是 Mac OS X,第二种方法实际上不起作用,但我很好奇是否有测量方法本机毫秒。
  • 我已经更新了我的答案,您可以使用第二种方法来测量间隔的纯外壳方法。