【问题标题】:Giving inputs to a Java program through a bash script通过 bash 脚本向 Java 程序提供输入
【发布时间】:2015-03-11 17:31:01
【问题描述】:

我有一个简单的 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 行(在打开的 cmd 上运行,等待用户输入问题并使用程序。只有当我终止 Java 程序时,处理继续并得到我想自动传递给 Java 程序的问题。有没有办法在 java 程序在 cmd 中运行时自动将这些问题传递给它?

【问题讨论】:

    标签: java bash scripting


    【解决方案1】:

    这将重定向输入:

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

    【讨论】:

      【解决方案2】:

      假设 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 将停止运行。我会留给你弄清楚如何判断 Alfred 何时完成以及接下来要做什么。

      【讨论】:

      • 这是coproc+1的绝佳使用
      • 谢谢,这正是我要找的!
      • 所以,当我早些时候尝试这种方法时,我只是在终端上输入了命令,一切正常。但是,当我将代码放入 bash 脚本并运行该脚本时,我收到一条错误消息 testScript.sh: 2: testScript.sh: coproc: not found。我有 bash 版本 4.3.11 ,但 coproc 似乎无法通过 bash 脚本识别(即使它在终端上输入时效果很好。我可能在 bash 脚本中犯了一些语法错误,但我不知道是什么。你能告诉我我可能做错了什么吗?谢谢!
      • 我首先想开始工作的脚本几乎就是你给我的答案(然后我可以添加更多):#!/bin/bashcoproc java Alfredecho Hey what time is it? &gt;&amp;${COPROC[1]}echo When is my next meeting? &gt;&amp;${COPROC[1]}我不需要使用 cat 行,因为 java 程序正在记录整个对话。脚本文件的名称是 testScript.sh,我将其作为 sh testScript.sh 运行。抱歉,4 行代码被塞在评论的单行上,我不知道如何将它们放在评论中的不同行:/
      • 好吧,这就是你的问题。如果您使用sh testScript.sh 运行它,您将使用sh 运行它,而不是bashcoproc 是一个内置的 bash,你不会在 sh 中使用它。以bash testScript.sh 的形式运行它,只需testScript.sh
      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2012-09-04
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多