ssh выходит из цикла while в bash [дубликат]

На этот вопрос уже есть ответ здесь:

Я использую этот bash-код для загрузки файлов на удаленный сервер, для обычных файлов это работает нормально:

for i in `find devel/ -newer $UPLOAD_FILE`
do
    echo "Upload:" $i
    if [ -d $i ]
    then
        echo "Creating directory" $i
        ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
        continue
    fi
    if scp -Cp $i $USER@$SERVER:$REMOTE_PATH/$i
    then
        echo "$i OK"
    else
        echo "$i NOK"
        rm ${UPLOAD_FILE}_tmp
    fi
done

Единственная проблема в том, что для файлов с пробелом в имени цикл for не работает, поэтому я заменил первую строку следующим образом:

find devel/ -newer $UPLOAD_FILE | while read i
do
    echo "Upload:" $i
    if [ -d $i ]
    then
        echo "Creating directory" $i
        ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
        continue
    fi
    if scp -Cp $i $USER@$SERVER:$REMOTE_PATH/$i
    then
        echo "$i OK"
    else
        echo "$i NOK"
        rm ${UPLOAD_FILE}_tmp
    fi
done

По какой-то странной причине команда ssh выходит из цикла while, поэтому первый отсутствующий каталог создается нормально, но все последующие отсутствующие файлы / каталоги игнорируются.

I думаю, это как-то связано с тем, что ssh записывает что-то в stdout, что сбивает с толку команду "read". Комментирование ssh-команды заставляет цикл работать так, как должен.

Кто-нибудь знает, почему это происходит и как можно предотвратить ssh нарушение цикла while?

85
задан Robby75 22 February 2012 в 10:28
поделиться