我已经检查过了这,但提供的解决方案对我来说不起作用。
使用日期我可以获取以秒为单位的执行时间:
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 库没有%N
(http://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 。date
gdate
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 类的类方法。