Bash脚本循环运行程序100次grep执行时间结果重复问题咨询
问题原因
- 临时文件未清空:脚本运行前没有清空
tempfile.txt,之前多次运行的残留数据会持续追加到文件中,最终统计行数远超100行。 - Bash内置
time的多进程统计行为:你当前调用的是Bash内置的time命令,当./mdu通过-j $i参数启动多线程/多进程执行时,内置time会为每个子进程单独输出一组时间统计结果,每组都包含real行,单次循环就会产生多条符合过滤条件的记录,并发数越高产生的行数越多。 - 循环次数不匹配预期:循环初始值
i=1,判断条件为[ $i -lt 100 ],实际只会执行99次,达不到你要的100次运行要求。
修复方案
直接调用系统自带的外部time命令(路径一般为/usr/bin/time),同时增加临时文件清空逻辑,修正循环次数,屏蔽目标程序自身的输出干扰,示例脚本如下:
#!/bin/bash # 清空临时文件,避免历史残留 > tempfile.txt # 改为for循环,明确执行100次 for ((i=1; i<=100; i++)) do # 调用外部time,丢弃mdu自身的stdout输出,只保留time的统计结果,过滤real行再写入临时文件 /usr/bin/time -p ./mdu -j $i /pkg 2>&1 1>/dev/null | grep ^real >> tempfile.txt echo $i done # 直接输出为最终结果文件 mv tempfile.txt plot.txt
修复后单次运行只会产生1条real记录,最终plot.txt会刚好有100行数据。
内容的提问来源于stack exchange,提问作者forsb
相关产品推荐
相关产品推荐

