Использование команды curl в цикле while - PullRequest
0 голосов
/ 21 марта 2012

Я новичок в этом, поэтому, пожалуйста, потерпите меня. Я пытаюсь использовать команду curl в цикле while-do с небольшим успехом. Я могу использовать команду curl вне цикла, чтобы получить ответ, но затем, когда он попадает в цикл while, он игнорирует команду curl и придерживается первого вывода в файл, не прерывая цикл, когда это будет сделано. Команда, которую я запускаю ранее, выводит на веб-страницу значение «2», означающее, что оно завершено, и значения «0,1 или 3» означают, что оно не завершено или произошла ошибка и т. Д. Поскольку для завершения возврата «2» может потребоваться время, может потребоваться некоторое время, следовательно, цикл. Значения «0,1,2,3» жестко закодированы и не могут быть изменены. Код работает, потому что если вы отмените запуск программы, файл будет обновлен, но он не будет виден в цикле. Я застрял в цикле и не могу выйти из него, потому что он не будет пересматривать веб-страницу для поиска " 2" Любые идеи, пожалуйста Вот фрагмент кода ниже

curl  --location http://$host_name/config-builder-test-app/jobStateResolver?jobId=$jobid > ./jobstate.txt

round=`grep -E "1|0|3" jobstate.txt`
while [ $round ]
do
curl  --location http://$host_name/config-builder-test-app/jobStateResolver?jobId=$jobid > ./jobstate.txt

echo "Waiting for confirmation of the completed build:";
sleep 5
done
echo "Successful build for $inputb ID $ID";

Ответы [ 2 ]

0 голосов
/ 21 июля 2014

Обычно CURL не может быть использован в конструкции цикла. С каждой итерацией используется другой сеанс HTTPD. Однако данные в стеке для «старого» сеанса еще не будут выпущены. Сброс переменной канала для освобождения стека не будет работать, так как количество сеансов HTTPD - плохой парень. Мы используем 1 основной HTTPD, порождая 4 подпроцесса. Таким образом, использование меха после 5 итераций петля будет разрушаться.

Итак, есть 2 решения этой проблемы. Либо подождите достаточно долго, чтобы «старый» сеанс HTTPD прошел, обычно в секундах. ИЛИ быть достаточно быстрым, имея «новые» итерации, следующие за «старыми», обычно msecs

Мы объединили все выходные данные CURL в одном массиве памяти перед его обработкой.

0 голосов
/ 21 марта 2012

Это потому, что переменная "round" просто обновляется один раз, прежде чем войти в цикл while. Вам нужно обновить это в цикле while после запуска curl, чтобы получить правильный результат.

...