【问题标题】:Running a regression with shell script and make utility使用 shell 脚本和 make 实用程序运行回归
【发布时间】:2020-02-13 14:20:04
【问题描述】:

我想使用 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

【问题讨论】:

  • make 只运行Makefile 中写入的任何内容。如果这运行一个后台进程,你应该检查你的 Makefile 的内容。
  • 另外,您应该调用#!/bin/bash 而不是#!/bin/sh,因为您使用的是使用$() 的类bash 语法。而且我建议将此处的字符串提供给 awk 而不是管道回声,例如$(awk '{print $1}' &lt;&lt;&lt; $line),这样效率更高,更不容易出错。
  • 使用read -r test_name program_path others; do 避免awk
  • 也许在make 之后添加wait 会有所帮助,但这是一种解决方法。你能展示你的 Makefile(更新问题)吗?
  • 如果只想获取前两个元素,则根本不需要awk。你可以使用while read test_name program_name rest; do ...read 命令采用多个变量名,并将每个传入的单词分配给下一个值,最后一个值得到剩下的所有内容。

标签: linux bash shell gnu-make questasim


【解决方案1】:

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

#!/bin/bash
forksome() {
   sleep 3&
   sleep 2&
   sleep 5&
}

echo "Forking some sleep"
forksome

我制作了一个 Makefile,在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2017-11-15
    • 2016-10-03
    相关资源
    最近更新 更多