Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
通过bash脚本向Java程序提供输入_Java_Bash_Scripting - Fatal编程技术网

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

通过bash脚本向Java程序提供输入,java,bash,scripting,Java,Bash,Scripting,我有一个简单的java程序(可以把它想象成苹果的Siri),当从终端启动时,它会等待用户输入问题,然后打印出回复。我想制作一个bash脚本来启动java程序,然后给它几个问题(就像一个人在输入问题一样)。这就是我所尝试的: #!/bin/bash # change to project directory cd C:/JavaProjects/VirtualButler #compile the program javac Alfred.java #start the program jav

我有一个简单的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脚本时,处理过程会停留在javaalfred行(在open cmd上运行,等待用户输入问题并使用程序。只有在我终止Java程序时,处理才会继续,并进入我想自动传递给Java程序的问题。是否有方法在Java程序在cmd中运行时自动将这些问题传递给Java程序

这将重定向输入:

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

javaalfred<假设bash4.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]}
#在后台进程中启动Alfred,并使用管道进出
科普洛克爪哇阿尔弗雷德酒店
#Alfred的stdin现在被${COPROC[1]}引用
echo Hey现在几点了?\r>&${COPROC[1]}
echo我的下一次会议是什么时候?\r>&${COPROC[1]}
#Alfred的stdout与${COPROC[0]}

cat这是
coproc
+1谢谢,这正是我要找的!所以,当我之前尝试这种方法时,我只是在终端上键入命令,一切正常。但是,当我将代码放入bash脚本并运行脚本时,我得到一条错误消息testScript.sh:2:testScript.sh:coproc:not foundve bash版本4.3.11,但是通过bash脚本似乎无法识别coproc(即使在终端上输入时它工作得很好。我可能在bash脚本中犯了一些语法错误,但我不知道是什么。你能告诉我我可能做错了什么吗?谢谢!我首先想要开始工作的脚本几乎就是你给我的答案(然后我可以添加更多内容):
#!/bin/bash
coproc java-Alfred
echo嘿,现在几点了?&${coproc[1]}
echo我下次会议是什么时候?>&${coproc[1]}
我不需要使用cat行,因为java程序正在记录整个对话。脚本文件的名称是testScript.sh,我以sh testScript.sh的形式运行它。很抱歉,注释中的单行中塞满了4行代码,我不确定如何将它们放在注释中的单独行中:/嗯,就是你r问题。如果您使用
sh testScript.sh
运行它,您将使用
sh
运行它,而不是
bash
coproc
是一个bash内置程序,您将无法使用
sh
运行它。请将其作为
bash testScript.sh
或简单地作为
testScript.sh
运行。