如何使用bash运行命令,获取输出和输入命令

时间:2012-12-18 02:51:44

标签: bash shell command

如何运行命令(这是一个命令行Java应用程序),读取其输出,并使用shell脚本输入输入。那可能吗?我听说过一个名为GNU Screen的东西,但是当我用谷歌搜索它时,看起来有些东西对我不起作用?我很迷茫。基本上所以 我需要运行一个命令,得到它的输出,发送它的输入。注意:您需要输入'exit'来停止命令,所以是。我在这里很困惑。指向我对GNU Screen的教程和解释或向我展示一些内容会很有帮助。

3 个答案:

答案 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,f​​tp,passwd,fsck,rlogin,tip等等“使用Tcl脚本语言。

但是,如果没有发送给程序的命令取决于同一程序的先前输出,那么Bash本身可能运行得很好;只需使用临时文件和I / O重定向(如Usman Saleem的回答):

  • 将命令列表保存到第一个文件中;和
  • 将程序的标准输入重定向到该文件;和
  • 将标准输出重定向到第二个文件。

read内置命令可能对读取生成的输出文件很有用。

GNU屏幕只是一个“终端多路复用器”程序,a)允许您通过单个调制解调器或SSH连接拥有多个终端“窗口”,并且b)允许您在程序之后保持程序运行断开与服务器的连接。这不是您正在寻找的计划。

我建议反对的一件事是让你的shell脚本生成程序的输入并实时接受程序的输出;数据将被捕获在stdio输出缓冲区中,并且可能发生死锁。这就是Expect创建的原因。