如何运行命令(这是一个命令行Java应用程序),读取其输出,并使用shell脚本输入输入。那可能吗?我听说过一个名为GNU Screen的东西,但是当我用谷歌搜索它时,看起来有些东西对我不起作用?我很迷茫。基本上所以 我需要运行一个命令,得到它的输出,发送它的输入。注意:您需要输入'exit'来停止命令,所以是。我在这里很困惑。指向我对GNU Screen的教程和解释或向我展示一些内容会很有帮助。
答案 0 :(得分:1)
使用输入输出重定向。例如,
java yourprog args > output.txt 2> erroutput.txt < input.txt
input.txt将包含您将在命令行中输入的字符串。 System.out.println将转到output.txt,System.err.println将转到erroutput.txt
Screen只是一个虚拟终端模拟器,它允许您从单个shell屏幕中获得多个shell。
答案 1 :(得分:0)
如果您不需要等待输入exit
:
output=$(echo "exit" | java prog)
答案 2 :(得分:0)
听起来你正在寻找的是 Expect ,“[...]一种自动化交互式应用程序的工具,如telnet,ftp,passwd,fsck,rlogin,tip等等“使用Tcl脚本语言。
但是,如果没有发送给程序的命令取决于同一程序的先前输出,那么Bash本身可能运行得很好;只需使用临时文件和I / O重定向(如Usman Saleem的回答):
read
内置命令可能对读取生成的输出文件很有用。
GNU屏幕只是一个“终端多路复用器”程序,a)允许您通过单个调制解调器或SSH连接拥有多个终端“窗口”,并且b)允许您在程序之后保持程序运行断开与服务器的连接。这不是您正在寻找的计划。
我建议反对的一件事是让你的shell脚本生成程序的输入并实时接受程序的输出;数据将被捕获在stdio输出缓冲区中,并且可能发生死锁。这就是Expect创建的原因。