如何在 Mac OS X 下获取 Bash 执行时间(以毫秒为单位)?

如何在 Mac OS X 下获取 Bash 执行时间(以毫秒为单位)?

我已经检查过了,但提供的解决方案对我来说不起作用。

使用日期我可以获取以秒为单位的执行时间:

T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"

但是,当我尝试这样做时:

T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"

将 %N(如上所述)添加到日期以获取纳秒精度,我收到以下错误:-bash:1369320760N:值对于基数来说太大(错误令牌为“1369320760N”)

有谁知道如何在 Mac OS X 下使用 bash 测量以毫秒为单位的执行时间?

答案1

由于 OSX 是一个 BSD 系统,它的 strftime 库没有%Nhttp://www.freebsd.org/cgi/man.cgi?query=date

bash 内置time命令是否为您提供了所需的信息?

time some work here

答案2

如果我需要毫秒并且 BSD 不支持日期,我会选择这条路线+%s%N

perl -MTime::HiRes -e 'printf("%.0f\n",Time::HiRes::time()*1000)'

答案3

如果您安装,您可以通过写入来coreutils使用 GNU Linux 。dategdate

coreutils 可与 Homebrew 一起使用:brew install coreutils

答案4

正如其他答案所提到的,OS X 的日期不支持 %N(纳秒)。

你能将命令保存为脚本吗?或者使用子 shell 或命令组:

time (sleep 0.1; echo a; sleep 0.1)
time { sleep 0.1; echo a; sleep 0.1; }

或者将各个命令的时间相加:

$ time=$(TIMEFORMAT=%R; (time sleep 0.1; echo a) 2>&1 > /dev/null)
$ time+=+$(TIMEFORMAT=%R; (time sleep 0.1) 2>&1)
$ bc <<< $time
.206

或者使用一些脚本语言:

$ ruby -e 'puts "%.3f" % Time.now'
1369329611.046
$ time ruby -e '""'
0.029
$ time ruby -e 'puts "%.3f" % Time.now'
1369329622.943
0.029

%.3f是具有 3 位小数的浮点数的格式说明符。是时候了是 Time 类的类方法。

相关内容