2015-07-16 3 views
3

У меня есть файл text.txt который содержит две строки."Разрешенные" операции в bash read while loop

first line 
second line 

Я пытаюсь Переберите в Баш, используя следующий цикл:

while read -r LINE || [[ -n "$LINE" ]]; do 
    # sed -i 'some command' somefile 
    echo "echo something" 
    echo "$LINE" 
    sh call_other_script.sh 

    if ! sh some_complex_script.sh ; then 
     echo "operation failed" 
    fi 

done <file.txt 

При вызове some_complex_script.shтолько первая строка обрабатывается, однако, комментируя это все две строки обрабатываются. some_complex_script.sh делает все такие вещи, как запуск процессов, SQLPLUS, начиная WildFly т.д.

./bin/call_some_script.sh | tee $SOME_LOGFILE & 
wait 

... 

sqlplus $ORACLE_USER/[email protected]$DB<<EOF 
whenever sqlerror exit 1; 
whenever oserror exit 2; 
INSERT INTO TABLE .... 
COMMIT; 

quit; 
EOF 

... 
nohup $SERVER_DIR/bin/standalone.sh -c $WILDFLY_PROFILE -u 230.0.0.4 >/dev/null 2>&1 & 

Мой вопрос если есть некоторые операции, которые не должны называться в some_complex_script.sh и в петля (это может занять 10 минут, это хорошая идея вообще), которая может нарушить эту петлю. Сценарий вызывается с использованием Jenkins и Publish over SSH Plugin. Когда some_complex_script.sh вызывается сам по себе, проблем нет.

ответ

8

Вы должны закрыть или перенаправить stdin для других команд, которые вы запускаете, чтобы остановить их чтение из файла. например:

sh call_other_script.sh </dev/null