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

Giving inputs to a Java program through a bash script

我有一个简单的 java 程序(可以把它想象成 Apple 的 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 行(即 运行ning 在打开的 cmd 上,等待用户输入问题并使用该程序。只有当我终止 Java 程序时,处理才会继续并获取我想自动传递给的问题Java 程序。有没有办法在 运行 正在 cmd 中自动将这些问题传递给 java 程序?

这将重定向输入:

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

假设 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。如果 Alfred 退出 运行,则 cat 将停止。我会留给你弄清楚如何判断阿尔弗雷德何时完成以及接下来该做什么。