2015-11-23 80 views
1

我有一個已知功能的Java程序。我想包裹一個bash腳本來傳遞關聯數組中的每個索引作爲參數。當java程序運行時,Maven將輸出寫入控制檯。Bash腳本 - 使用期望從標準輸出讀取

我想要的是讓bash在繼續之前等待在標準輸出中看到「[INFO] BUILD SUCCESS」行。一旦它確認了java進程成功運行,我會在java程序創建的文本文件上執行一些任務。只有這樣我纔想去循環的下一次迭代。

我的參數關聯數組:

params=([1]cat [2]dog [3]fish) 

環路邏輯:

for i in "${!params[@]}" 
do 
    mvn exec:java -Dexec.mainClass="com.company.ProgramMainClass" -Dexec.args="$i '2015-11-01'" | /usr/bin/expect "[INFO] BUILD SUCCESS" 
    mv /tmp/outputfile.csv /path/to/directory/${params[$i]}_outputfile.csv 
done 

我不能找出語法以使期望在標準輸出的工作。我已經閱讀了幾個例子,並通過期望手冊進行了討論,但我只是不理解它是如何工作的。

我覺得我應該能夠管輸出標準的期望和腳本等待,直到期望看到給定的字符串。但它不起作用。有任何建議嗎?謝謝。

+4

你不需要期待'[INFO] BUILD SUCCESS'。純粹的bash(或者'grep')可以勝任。例如'blah blah command | grep -q'^ \ [INFO] BUILD SUCCESS $'',並檢查返回狀態。 – 4ae1e1

+0

http://stackoverflow.com/questions/13377436/executing-maven-task-from-shell-script-and-getting-error-codes –

回答