Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bash脚本——使用expect从标准输出读取_Java_Bash_Maven_Expect - Fatal编程技术网

Java Bash脚本——使用expect从标准输出读取

Java Bash脚本——使用expect从标准输出读取,java,bash,maven,expect,Java,Bash,Maven,Expect,我有一个java程序,大家都知道它是功能性的。我试图在它周围包装一个bash脚本,以便将关联数组中的每个索引作为参数传入。当java程序运行时,Maven将输出写入控制台 我希望bash在继续之前先在标准输出中看到“[INFO]BUILD SUCCESS”一行。一旦确认java进程成功运行,我就对java程序创建的文本文件执行一些任务。只有这样,我才想进入循环的下一个迭代 我有一个参数的关联数组: params=([1]cat [2]dog [3]fish) 循环逻辑: for i in "$

我有一个java程序,大家都知道它是功能性的。我试图在它周围包装一个bash脚本,以便将关联数组中的每个索引作为参数传入。当java程序运行时,Maven将输出写入控制台

我希望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
我无法理解让expect在标准输出上工作的语法。我已经阅读了几个示例并仔细阅读了expect手册,但我不明白它是如何工作的

我觉得我应该能够通过管道将标准输出传递给expect,并让脚本等待expect看到给定的字符串。但它不起作用。有什么建议吗?谢谢

如果需要,您可以这样使用:

#!/usr/bin/expect
set timeout -1
expect "*\\\[INFO\\\] BUILD SUCCESS*"
需要三个反斜杠。

如果需要,可以这样使用:

#!/usr/bin/expect
set timeout -1
expect "*\\\[INFO\\\] BUILD SUCCESS*"

需要三个反斜杠。

您不需要期望
[INFO]构建成功。纯bash(或者可能是
grep
)的功能非常强大。例如,
blah blah命令| grep-q'^\[INFO]BUILD SUCCESS$'
,并检查返回状态。您不需要期待
[INFO]BUILD SUCCESS
。纯bash(或者可能是
grep
)的功能非常强大。例如,
blah blah命令| grep-q'^\[INFO]BUILD SUCCESS$”
,并检查返回状态。