Shell 如何通过管道将程序的cmdline输出运行多次并在出现关键字时停止?
假设我想运行一个C程序1000次,这个程序基本上是一个测试脚本,它测试我编写的一个简单内核的功能。每次失败时,它都会输出一个“成功”。由于各种难以追踪的比赛条件,我们通常不得不在测试失败之前手动运行测试数百次。我尝试在网上搜索perl脚本或bash脚本来帮助我们运行此命令,但没有成功:Shell 如何通过管道将程序的cmdline输出运行多次并在出现关键字时停止?,shell,Shell,假设我想运行一个C程序1000次,这个程序基本上是一个测试脚本,它测试我编写的一个简单内核的功能。每次失败时,它都会输出一个“成功”。由于各种难以追踪的比赛条件,我们通常不得不在测试失败之前手动运行测试数百次。我尝试在网上搜索perl脚本或bash脚本来帮助我们运行此命令,但没有成功: pintos -v -k -T 60 --qemu -j 2 --filesys-size=2 -p tests/vm/page-parallel -a page-parallel -p tests/vm/chi
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
pintos-v-k-t60--qemu-j2--filesys size=2-p tests/vm/page parallel-a page parallel-p tests/vm/child linear-a child linear--swap size=4--q-f运行page parallel
并通过管道将命令传递到某个对象以检查关键字,以便在该关键字出现时可以停止/继续
任何人都可以为我指出正确的方向吗?在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
为true时;做
如果“pintos-v-k-t60--qemu-j2--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
我不能100%确定您在命令中需要引用什么,显然我无法运行您的特定命令。它周围可能不需要“”符号
grep-c
对匹配项进行计数,如果为0,则未找到关键字,因此它将再次运行循环。如果>0,则找到关键字并触发循环。谢谢!我不需要在命令周围引用。这个命令对我很有效:虽然是真的;如果pintos-v-k-t60--qemu-j2--filesys size=2-p tests/vm/page parallel-a page parallel-p tests/vm/child linear-a child linear--swap size=4--q-f运行page parallel | grep-c“exit(-1)”;那就结束吧