如何管道程序的cmdline输出多次运行并在关键字出现时停止?

时间:2013-03-01 10:46:25

标签: shell

假设我想运行一个C程序1000次,这个程序基本上是一个测试脚本,用于测试我编写的简单内核的功能。每次失败时都会输出“SUCCESS”。由于难以追踪的各种竞争条件,我们经常需要在失败之前手动运行测试几百次。我试图在网上徒劳地搜索可以帮助我们运行此命令的perl脚本或bash脚本:

pintos -v -k -T 60 --qemu -j 2 --filesys-size=2 -p tests/vm/page-parallel -a page-parallel -p tests/vm/child-linear -a child-linear --swap-size=4 -- -q -f run page-parallel < /dev/null

并将命令传递给要检查关键字的内容,以便在出现该关键字时停止/继续。

任何人都可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

在bash中你可以在while循环中运行它:

while true; do
if "pintos -v -k -T 60 --qemu -j 2 --filesys-size=2 -p tests/vm/page-parallel -a page-parallel -p tests/vm/child-linear -a child-linear --swap-size=4 -- -q -f run page-parallel < /dev/null" | grep -c KEYWORD; then 
break
fi
done

我不是100%肯定你在命令周围需要的引用,显然我无法运行你的特定命令。它可能不需要它周围的“”。

grep -c计算匹配,如果为0,则找不到KEYWORD,因此它再次运行循环。如果&gt; 0然后找到KEYWORD并且循环爆发。