2012-03-21 304 views
0

我對此很陌生,因此請耐心等待。 我正在嘗試在while-do循環中使用curl命令,但成功率很低。 我可以使用循環外的curl命令來獲得響應,但是當它碰到while循環時,它會忽略curl命令,並將第一個輸出粘貼到文件中,並且在完成時不會打斷循環。 我以前運行的命令會向網頁輸出值「2」,表示它已完成,值「0,1或3」表示尚未完成或錯誤等。 因爲完成此操作可能需要一些時間返回「2」可能需要一段時間,因此循環。 值「0,1,2,3」是硬編碼的,不能更改。 該代碼的確如此,因爲如果你從運行中取消程序,文件確實會得到更新,但它不能在循環過程中看到。我被困在循環中,無法分離它,因爲它不會重新訪問網頁以尋找「2」 任何想法,請 下面是代碼的下方在while循環中使用curl命令

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"; 

回答

0

一個SNIPPIT這是因爲「圓」變一下就更新一次前進入while循環。在運行curl以獲得正確結果後,您需要在while循環中更新它。

0

通常CURL不能用於循環結構。每次迭代使用另一個HTTPD會話。然而,舊的會話堆棧中的數據還沒有發佈。 取消設置通道變量釋放堆棧不起作用,因爲HTTPD會話的數量是壞人。我們使用1個主HTTPD,產生4個子過程。因此,在5次迭代之後,毛髮將使用循環來摺疊。

所以,這個問題有兩種解決方案。 或者等待足夠長的時間,以使'舊'HTTPD會話消失,通常是秒。 或者是足夠快,有'新'迭代,遵循'舊',通常是msecs

我們在處理它之前將所有CURL輸出連接在單個存儲器陣列中。