我有一个简单的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程序?
答案 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")