Bash脚本未按预期多次执行问题排查
问题分析与解决方案
嘿,这个问题我一眼就看穿了——你脚本里的exec命令就是导致程序只跑一次的元凶!
为啥脚本只执行一次?
exec命令的核心作用不是启动新进程运行程序,而是直接用指定命令替换当前的Shell进程。当第一次循环执行exec $comm > outputs/file${i}.txt时,你的bash脚本进程直接被Segmentation程序取代了,等这个C++程序运行结束,整个进程就直接退出了,自然不会继续后面的29次循环。sleep命令在这里根本帮不上忙,因为脚本都已经没了。
修复后的脚本
把exec删掉,直接执行命令并重定向输出就搞定了:
#!/bin/bash thrd=2 comm="./Segmentation $thrd" for i in $(seq 1 30) do echo "${i}" $comm > outputs/file${i}.txt sleep 1s done
额外说明
- 要是你之前加
exec是想优化性能,其实完全没必要——直接执行命令会启动新的子进程运行你的C++程序,这才是脚本循环执行外部程序的正确姿势。 sleep 1s可以保留,如果你需要给程序运行留足时间,或者避免短时间内频繁启动程序导致的资源竞争问题。
内容的提问来源于stack exchange,提问作者Shinforinpola
相关产品推荐
相关产品推荐

