在while循环中使用curl命令

时间:2012-03-21 14:44:02

标签: curl while-loop do-while

我是新手,请耐心等待。 我试图在while-do循环中使用curl命令但收效甚微。 我可以在循环外部使用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 :(得分:0)

那是因为“round”变量在进入while循环之前只更新一次。在运行curl之后,您需要在while循环中更新它以获得正确的结果。

答案 1 :(得分:0)

通常,CURL不能用于循环结构中。每次迭代使用另一个HTTPD会话。然而,“旧”的堆栈数据会话尚未发布。 取消设置通道变量以释放堆栈将无法工作,因为HTTPD会话的数量是坏人。我们使用1个主HTTPD,产生4个子流程。所以毛皮在5次迭代后使用,循环将会崩溃。

因此,这个问题有两个解决方案。 要么等待足够长的时间用于“老年人”。 HTTPD会话已经消失,通常是秒。 或者足够快,拥有新的'迭代,遵循' old',通常是msecs

我们在处理之前将所有CURL输出连接在一个内存阵列中。