2010-11-21 90 views
2

我正在尝试编写一个脚本来执行C程序并测量在Unix中使用time命令执行的时间。Shell脚本来计算已用时间

脚本看起来如下

cc /home/pop/Daa/abc.c 

r = `time /home/pop/Daa/./a.out` 

echo "recursion" $r >> log.txt 

cc /home/pop/Daa/xyz.c 

d = `time /home/pop/Daa/./a.out ` 

echo "dynamic" $d >> log.txt 

但是在执行脚本之后的log.txt文件只包含单词递归和动态。时间值似乎缺失。但是,命令行终端上执行time命令提供了以下输出

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

如何才能得到这个输出格式包含执行的只有“真实”的时间和写入日志文件?

回答

1

time输出变成到stderr。你必须redirect it

TIMEFORMAT=%R 
r=$({ time /home/pop/Daa/./a.out; } 2>&1) 

而且在等号周围不能有空格。这是preferable使用$()而不是反引号,因为它更容易阅读,没有单引号混淆,并且它们更容易嵌套它们。

1

当你给一个变量赋值时,你不应该在等号周围有空格。例如:

r=`time /home/pop/Daa/./a.out` 

如果你只想要 “真正” 的时候,使用grep

r=`time /home/pop/Daa/./a.out | grep real` 

time命令使用%e

r=`time -f '%e' /home/pop/Daa/./a.out` 
+0

“-f:找不到命令” - 因为Bash有一个内建的“时间”。如果您只想输出实时数据,请使用'TIMEFORMAT'变量。或者,要使用'time -f',你必须指定使用外部工具:'command time -f ...'或'/ usr/bin/time -f ...'。 – 2010-11-21 15:16:52