我有一个简单的java程序(可以把它看作苹果的Siri),当从终端启动时,它会等待用户输入一个问题,然后打印出一个回复。我想制作一个bash脚本来启动java程序,然后给它几个问题(就像一个人正在输入它们一样)。我就是这么想的:
#!/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程序的问题。当java程序在cmd中运行时,是否有方法自动将这些问题传递给它?
最佳答案
假设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。如果阿尔弗雷德不跑了,猫就会停下来。我把这事留给你去弄清楚阿尔弗雷德什么时候被干掉了,然后该怎么办。
关于java - 通过bash脚本将输入提供给Java程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27927579/