我正在尝试编写一个脚本来执行C程序,并在Unix中使用time命令测量执行时间。
脚本如下所示
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
如何将此输出格式化为仅包含“实际”执行时间并写入日志文件?
答案 0 :(得分:1)
为变量赋值时,等号周围不应有空格。例如:
r=`time /home/pop/Daa/./a.out`
如果您只想要“真实”时间,请使用grep
:
r=`time /home/pop/Daa/./a.out | grep real`
或在%e
命令中使用time
:
r=`time -f '%e' /home/pop/Daa/./a.out`
答案 1 :(得分:1)
time
的输出转到stderr。你必须redirect it。
TIMEFORMAT=%R
r=$( { time /home/pop/Daa/./a.out; } 2>&1 )
你不能在等号周围留出空格。使用$()
代替反引号是preferable,因为它更容易阅读,单引号没有混淆,并且更容易嵌套。