2015-01-02 2 views
2

Я сделал этот скрипт, который проверяет, создан ли оффшорный скрипт. Я работаю нормально и emdash; Я включил функцию, чтобы сделать ее немного чище. Но я не думаю, что функция работает, потому что она продолжает печатать в одно и то же время, в считанные секунды.Вызов функции Bash в цикле while

#!/bin/bash 
#set -x 
check_offshore() 
{ 
    local RESULTS 
    RESULTS=$(ssh -q -T [email protected] "ls -ltr /come/and/play/with/us/danny/DropBox| grep foreverr_and_$today.csv") 
    rc=$? 
} 

today=$(/bin/date +%Y%m%d) 
time=$(/bin/date +"%T.%3N") 
iterate=0 
while [ $iterate -le 5 ] 
do 
    check_offshore 
    if [[ $rc != 0 ]] ; then 
     echo "$time foreverr_and_$today.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox" 
     fi 
    sleep 5 
    iterate=$((iterate+1)) 
    done 

Это журнал, который он создает и emdash; время журнала никогда не изменяется. Он остается прежним, навсегда и всегда и всегда, пока сценарий не остановится.

17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 

Что происходит и как его исправить?

+3

Поскольку вы не устанавливаете 'time = $ (...)' внутри цикла, как вы ожидаете его изменения? –

+0

Если вы используете Bash, вы можете выбрать 'for ((iterate = 0; iterate <= 5; iterate ++))' для управления циклом. –

ответ

3

Обратите внимание, что проблема не имеет ничего общего с функцией как таковой; проблема в петле и ее непосредственном окружении.

Поскольку вы не устанавливаете time=$(...) внутри цикла, как вы ожидаете его изменения?

Измените цикл так, чтобы время пересматривалось на каждой итерации. Поскольку дата может измениться, если вы запустите этот скрипт после 23:59:30, вы также можете установить дату на каждой итерации. Вы также можете использовать Bash-специфический механизм управления петля:

for ((iterate = 0; iterate <= 5; iterate++)) 
do 
    today=$(/bin/date +%Y%m%d) 
    time=$(/bin/date +"%T.%3N") 
    check_offshore 
    if [[ $rc != 0 ]] ; then 
     echo "$time foreverr_and_$today.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox" 
    fi 
    sleep 5 
done 

Вы можете предпочесть придерживаться первоначальной даты, в этом случае вы можете продолжать устанавливать today один раз вне цикла. Обратите внимание, что ваш журнал становится немного сомнительным, если дело идет от 23: 59: 56.234 до 00: 00: 02.197, потому что вещи заняли некоторое время незадолго до полуночи. Независимо от того, важно ли это для вас или нет, вы должны будете принять решение. Я рекомендую быть недвусмысленным с датой + времени в файле журнала; легче диагностировать, что произошло, когда несколько дней спустя.

+0

timmy() { {} добавлена ​​подпрограмма с указанием даты и времени – capser

Смежные вопросы