使用 shell 脚本运行回归并创建实用程序



我想用一个 shell 脚本运行回归,该脚本应该通过make命令启动每个测试。以下是我的脚本的简单版本:

#!/bin/sh                                                                                                                                                                                                                                                                       
testlist="testlist.txt"
while read line;
do
test_name=$(echo $line | awk '{print $1}')
program_path=$(echo $line | awk '{print $2}')
make sim TEST_NAME=$test_name PROGRAM_PATH=$program_path
done < "$testlist"

上述脚本的问题在于,当make命令启动程序时,脚本进入下一次迭代,而不等待该程序在上一次迭代中完成,并继续从文件中读取下一行。

make实用程序中是否有任何选项来确保它等待程序完成?也许我错过了别的东西。

这是Makefile的相关部分:

sim:
vsim -i -novopt 
-L $(QUESTA_HOME)/uvm-1.1d 
-L questa_mvc_lib 
-do "add wave top/AL_0/*;log -r /*" 
-G/path=$(PROGRAM_PATH) 
+UVM_TESTNAME=$(TEST_NAME) +UVM_VERBOSITY=UVM_MEDIUM -sv_seed random

正如 OP 在评论中所说,他注意到vsim分叉了几个其他进程,这些进程在vsim完成后仍在运行。所以他需要等到其他过程完成。
我用一个脚本模拟了你的vsim命令,该脚本分叉了一些睡眠进程:

#!/bin/bash
forksome() {
sleep 3&
sleep 2&
sleep 5&
}
echo "Forking some sleep"
forksome

我制作了一个制作文件,在make normal后显示您的问题。
当您知道哪些进程被分叉时,您可以按照我在make new中演示的那样制定解决方案。

normal: sim
ps -f
new: sim mywait
ps -f
sim:
./vsim
mywait:
echo "Waiting for process(es):"
while pgrep sleep; do sleep 1; done

最新更新