Баш за концы петель после 300 петель? - PullRequest
0 голосов
/ 19 сентября 2011

У меня очень интересная проблема, в моем скрипте 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 и т. Д.

Ответы [ 3 ]

5 голосов
/ 19 сентября 2011

Я подумал, может ли это быть ограничением количества выводимых данных, которые могут быть заменены обратными чертами, но я не могу воспроизвести это в моей системе Linux, и удивительно, что вы, очевидно, не видите никаких сообщений об ошибках. Однако, в качестве альтернативы вашему текущему сценарию вы можете попробовать использовать seq, но передать его результаты в цикл while read, чтобы избежать подстановки:

seq $1 $2 | while read i
do
    composite $i".png" $i"_temp.png" $i"_out.png"
done
1 голос
/ 19 сентября 2011

Почему вы не используете цикл while?

i=0
while [ $i -le $1 ]
    do 
        composite $i".png" $i"_temp.png" $i"_out.png"
        i=$((i + 1))
    done
0 голосов
/ 20 сентября 2011

Нет необходимости использовать внешние команды

for ((i=$1; i<=$2 ;i++))
do
  composite "${i}.png" "${i}_temp.png" "${i}_out.png"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...