2015-11-23 77 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 –

回答