我有一个非常有趣的问题,在我的下面的bash脚本中,for循环以某种方式在300循环后停止(我有时需要它执行超过600)。
#!/bin/bash
for i in `seq $1 $2`;
do
composite $i".png" $i"_temp.png" $i"_out.png"
done
我在使用300多个循环运行其他语言的同一命令时没有遇到任何问题。我不知道bash会发生什么。
另外,我注意到在第300个循环之后,脚本不会退出,而是“暂停”。
我目前正在使用此方法解决此问题,方法是将脚本从1运行到250,然后从251运行到500,等等。
答案 0 :(得分:5)
我想知道这可能是对反引号中可以替换的输出量的限制,但是我无法在我的Linux系统上重现它,并且令人惊讶的是你显然没有看到任何错误消息。但是,您可以尝试替代当前脚本的方法仍然是使用seq
,但将其结果传递给while read
循环,这样可以避免替换:
seq $1 $2 | while read i
do
composite $i".png" $i"_temp.png" $i"_out.png"
done
答案 1 :(得分:1)
为什么不使用while循环?
i=0
while [ $i -le $1 ]
do
composite $i".png" $i"_temp.png" $i"_out.png"
i=$((i + 1))
done
答案 2 :(得分:0)
无需使用外部命令
for ((i=$1; i<=$2 ;i++))
do
composite "${i}.png" "${i}_temp.png" "${i}_out.png"
done