【发布时间】:2011-09-22 00:43:38
【问题描述】:
我正在尝试制作一个 bash 脚本,该脚本将与一个通过 bash 等待我的命令的 java 程序对话。 java 程序作为服务器运行,GUI 非常有限,所以我正在为它制作一个基本的 UI,它将为其添加功能,任何关于这个主题的帮助都会很好。
我目前尝试的启动方式是:
INPUTFD=258
#exec "$INPUTFD"> >(exec java -Xmx512M -Xms512M -jar server.jar)
使用类似的命令
(echo "kick ${user}") >&"$INPUTFD"
还有我现在用的那个
java -Xmx512M -Xms512M -jar server.jar & echo "Started"
pid=$!
但我在谷歌上找不到任何东西可以帮助我使用 echo 或类似的东西来帮助这里
我在想管道可能会工作,但我认为我必须将大部分脚本移动到另一个文件中才能使用管道,然后脚本中的 echo 命令似乎不再需要工作了,所以,我愿意接受任何想法,谢谢 vzybilly
编辑:(第二次输入这个,抱歉,如果现在不是所有的都有意义)在谷歌搜索和更深入地思考这个想法之后,我找到了一个更好的方法来提出这个问题。脚本(现在应称为主程序或主脚本)将与用户交互,并且根据用户告诉主程序的内容,它会告诉 java 程序它做了什么,在某些情况下它会是相同的当用户在其他人中输入时,它将是主程序自己的东西,由用户对主程序说的话。主程序将处理两个输出和一个输入(终端双向,只有一种方式到 java 程序)
我认为可能可行的一种方法是在主脚本和 java 程序之间有一个文件和另一个脚本,另一个脚本将被命名为 server_handler.sh (我们将其称为处理程序脚本),它的工作方式在主脚本中有一个这样的命令来让它运行:
server_handler.sh | java -jar server.jar
然后,当我们想从主脚本对服务器说些什么时,我们会这样做:
echo "what we want to tell the sever" >> cmd.tmp
有了这个,处理程序脚本所做的就是从文件中读取并通过管道将其回显到 java 程序,我在这里遇到的问题是如何让处理程序脚本知道它已经读取或即使在读取时添加了文件,也要删除它已读取的行? (某些命令将连续输入多达 27 次,并且通常需要几分钟的服务器启动并运行命令才能使用(否则为垃圾),有时可能永远不会在当前服务器中存在命令运行,或几天)。我可以在终端中使用脚本进行对话时写入文件,因此主脚本不会很难,但处理程序脚本中会包含什么?
最终工作脚本:
运行.sh:
#!/bin/bash
tail -f input.txt | java server.jar &
echo "Do Not Close This Window Or Press Enter Till Server Is Off Line,"
read -p " Doing So Will Force Close The Server, Please press enter when done."
主脚本调用:
gnome-terminal -x ./run.sh
向服务器发出命令:
echo "command to server" >> input.txt
我还没有通过严格的测试,但它应该会继续工作
【问题讨论】:
-
我认为一个管道就足够了
-
那么,管道可以吗?谷歌在这方面对我帮助不大。我如何通过终端获取回显命令以供用户查看并回显(?)到管道(我会说正常回显)
标签: java bash ubuntu subprocess