如何获取bash脚本中经过的时间(以毫秒为单位)?

问题描述:

我尝试使用“T1 = $(日期+%S%N)”,以获得在纳秒的时间,但我一直在收到此错误:如何获取bash脚本中经过的时间(以毫秒为单位)?

./script.sh: line 10: 1292460931N: value too great for base (error token is "1292460931N") 

我抬头一看网上,似乎就可以使用“时间”命令,但我找不到使用时间命令的一个很好的例子。任何帮助将不胜感激:)

+1

您是否想要让脚本运行的时间或者脚本运行的时间? – JonMR 2010-12-16 01:10:10

+1

东西在我的脚本 – 2010-12-16 01:15:59

好的,这里有几件事。

首先,无论如何,并不是很多系统都能给你一个准确到毫微秒的时间。

现在,使用时间,无论是作为/usr/bin/time还是shell内建(bash:help time)都很容易。如果你想一次命令foo1,然后

$ time foo 

将返回的持续时间作为三条线标准错误

real 0m0.001s 
user 0m0.000s 
sys 0m0.000s 

,你可以用你喜欢的任何方式。

如果您想获得更好,更准确的计时,请多次执行该命令。这可能是写一个短环

time for i in 0 1 2 3 4; do foo; done 

会做foo五次,给你的总时间一样简单。你可能想要做5次以上的迭代,所以你可能需要一个计数器和一个while循环等。

+0

@Tony:您可以使用'TIMEFORMAT'变量或'/ usr/bin/time'使用'-f'选项来控制Bash内置'time'的输出。请参阅“男士bash”或“男士时间”。 – 2010-12-16 05:08:18

您正在使用的date命令不支持%N所以你的输出字面上是1292460931N。我在Linux上尝试过它,但它在FreeBSD上看到了你得到的结果。在shell中运行该日期命令并查看出现的内容。是否有可能使用busybox?其截止日期命令也省略了%N,但我刚试过的版本给了我1292463535%N

+0

你知道任何其他方式获得毫秒颗粒度? – 2010-12-16 01:40:25

+1

@Tony是的,你可以编译一个调用'getitimer()'和'setitimer()'的C程序,并使用你的脚本来调用它。 – SiegeX 2010-12-16 01:43:32