今天写shell脚本时遇到一个问题:
在一个叫做isp硬件模拟器上运行一系列.c的测试题,但是这个模拟器在跑完一道测试题之后还会模仿cpu一直空转(类似低功耗待机状态),进程无法中断,所以也无法继续运行接下来的可执行文件。
所以导致了每次运行完一道测试题之后,要确定这道测试题是否跑出结果,然后保存结果,kill掉该测试题的进程,再丢下一个测试题进行测试。
那么如何实现结果回扫,依次杀死课题,并运行下一道测试题呢?
我的思路是这样的:
1.在每个.c文件的最后都加一个打印——“$name test ok!”。比如aaa.c文件的最后,就会有一行“aaa test ok!”
2.每隔五秒去扫描改模拟器的打印文件,如果扫到了$name test ok!,就证明该题目已经测试完毕,那么进行结果保存。
3.杀掉该进程(因为题目跑完后模拟器还在一直空转),去运行下一道题目。
具体代码如下:
#!/bin/bash
#this is a run shell for scan the result periodicity
#author liao
#date 2018.01.29
#对题目进行编译,题目为目录$HOME/test/isp_test下的c文件,编译器是gcc编译器
cd $HOME/test/isp_test
for name in `ls *.c`
do
#这行代码的意思是,aaa.c编译生成的文件命名为aaa,而不是a.out,并将编译过程重定向到log文件中。
gcc $name -o ${name%%.*} &>>log
done
#看log文件中有没有报编译错误
str1=`grep "error" log`
len1=$