通过bash脚本为Java程序提供输入

时间:2015-01-13 17:05:53

标签: java bash scripting

我有一个简单的java程序(将其视为Apple的Siri),当从终端启动时,等待用户输入问题,然后打印出回复。我想创建一个启动java程序的bash脚本,然后给它一些问题(就像人类正在键入它们一样)。这就是我试过的:

#!/bin/bash
# change to project directory
cd C:/JavaProjects/VirtualButler

#compile the program
javac Alfred.java

#start the program
java Alfred

#Give it questions
echo Hey what time is it?\r
echo When is my next meeting?\r

#keep the terminal open so I can see the answer
PAUSE

但是,当我运行bash脚本时,处理停留在 Java Alfred 行(在open cmd上运行,等待用户输入问题并使用该程序。)当我终止Java程序时,处理继续进行并得到我想要自动传递给Java程序的问题。有没有办法在cmd中运行时自动将这些问题传递给java程序?

2 个答案:

答案 0 :(得分:3)

假设bash 4.0及更高版本,您可以使用coproc命令。

# Starts Alfred in a background process with pipes in and out of it
coproc java Alfred
# Alfred's stdin is now referred to with ${COPROC[1]}
echo Hey what time is it?\r >&${COPROC[1]}
echo When is my next meeting?\r >&${COPROC[1]}
# Alfred's stdout is found with ${COPROC[0]}
cat <&${COPROC[0]}

请注意,从这里开始,cat会挂起,因为文件描述符上没有EOL。如果阿尔弗雷德退出运行,那么猫就会停止。我会留给你弄清楚如何判断阿尔弗雷德何时完成以及该怎么做。

答案 1 :(得分:1)

这将重定向输入:

java Alfred < <(printf "Hey what time is it?\r When is my next meeting?\r")