2011-09-19 78 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