2011-09-19 81 views
0

我有一个非常有趣的问题,在我下面的bash脚本中,for循环总是在300循环后终止(我有时需要它在600以上执行)。Bash for循环在300循环后结束?

#!/bin/bash 

for i in `seq $1 $2`; 
do 

composite $i".png" $i"_temp.png" $i"_out.png" 

done 

我不得不运行在其他语言中环与300环相同的命令没有问题。我不知道bash会发生什么。

此外,我注意到,在第300个循环后,脚本不会退出,而是“暂停”。

目前我使用此问题的方法从251到500,从运行1脚本250,然后

+0

你使用的是什么范围?这应该适用于几位数字 –

+0

1 - 500+(从不高于700 tho) – Tom

+1

不能以任何方式引发错误。你在运行什么操作系统? 'file your_script.sh'输出是什么? Bash的版本?你怎么称呼剧本?如果将shebang更改为'#!/ bin/bash -x',脚本暂停时会得到什么? –

回答

5

我想知道这可能是对可以在反引号被取代的输出量的限制,但我不能重现我的Linux系统上,而你似乎看不到任何让人惊讶错误信息。然而,有些东西你可以尝试以替代当前的脚本仍然使用seq但它的结果传递到while read循环,这将避免替代:

seq $1 $2 | while read i 
do 
    composite $i".png" $i"_temp.png" $i"_out.png" 
done 
+0

我将修改应用于我的脚本,现在运行它,它是一个长脚本,因此它需要20分钟才能完成并查看该脚本是否有效。 – Tom

+0

就像一个魅力:) – Tom

1

你为什么不使用while循环?

i=0 
while [ $i -le $1 ] 
    do 
     composite $i".png" $i"_temp.png" $i"_out.png" 
     i=$((i + 1)) 
    done 
+0

whitespace maaan,whitespace ... –

+0

那好些?大声笑 – das7002

+0

哈哈。现在尝试运行它.. –

0

无需使用外部命令

for ((i=$1; i<=$2 ;i++)) 
do 
    composite "${i}.png" "${i}_temp.png" "${i}_out.png" 
done