脚本返回延迟输出后将光标放回 bash 提示符处

脚本返回延迟输出后将光标放回 bash 提示符处

只是一个小问题。我正在编写一个简单的 bash 脚本来启动和停止 Jetty。当我执行它时,脚本会立即将光标放回 bash 提示符上。但是,当 Jetty 启动并将其初始化输出写回到 stdout 时,它会将光标留在自己的一行上(没有提示),直到我输入命令或按回车键。我知道这是吹毛求疵,但我认为有一种简单的方法可以避免这种情况,而我却错过了。

脚本如下:

#!/bin/bash
cd /opt/jetty/jetty-distribution-7.4.5.v20110725/
if [ "$1" = "-stop" ]
then
    java -DSTOP.PORT=8079 -DSTOP.KEY=something -jar start.jar --stop
else
    java -DSTOP.PORT=8079 -DSTOP.KEY=something -jar start.jar &
fi

输出如下:

[user@machine ~]# jetty
[user@machine ~]# 2011-08-11 14:47:34.818:INFO::jetty-7.4.5.v20110725
2011-08-11 14:47:34.866:INFO::Deployment monitor /opt/jetty/jetty-distribution-7.4.5.v20110725/webapps at interval 1
2011-08-11 14:47:34.878:INFO::Deployment monitor /opt/jetty/jetty-distribution-7.4.5.v20110725/contexts at interval 1
2011-08-11 14:47:34.883:INFO::Deployable added: /opt/jetty/jetty-distribution-7.4.5.v20110725/contexts/javadoc.xml
2011-08-11 14:47:34.934:INFO::started o.e.j.s.h.ContextHandler{/javadoc,file:/opt/jetty/jetty-distribution-7.4.5.v20110725/javadoc}
2011-08-11 14:47:34.935:INFO::Deployable added: /opt/jetty/jetty-distribution-7.4.5.v20110725/contexts/test.xml
2011-08-11 14:47:35.011:INFO::Extract jar:file:/opt/jetty/jetty-distribution-7.4.5.v20110725/webapps/test.war!/ to /tmp/jetty-0.0.0.0-8080-test.war-_-any-/webapp
2011-08-11 14:47:35.645:INFO::started o.e.j.w.WebAppContext{/,file:/tmp/jetty-0.0.0.0-8080-test.war-_-any-/webapp/},/opt/jetty/jetty-distribution-7.4.5.v20110725/webapps/test.war
2011-08-11 14:47:36.127:INFO:org.eclipse.jetty.servlets.TransparentProxy:TransparentProxy @ /javadoc to http://download.eclipse.org/jetty/stable-7/apidocs
2011-08-11 14:47:36.199:INFO::Started [email protected]:8080 STARTING

光标最终停留在下面的空白新行上。有办法防止这种情况发生吗?我对 Bash 脚本还很陌生,有什么我应该做但我没有做的事情吗?

答案1

您无法轻易阻止这种情况 —— 当后台进程写入终端时,bash 根本不会收到任何信号,只有当它完全退出时才会收到信号。(信号输出仅传递给写入过程,在本例中为 Java,它无法控制何时显示提示……)

答案2

您可以将输出重定向到 java 命令的文件

相关内容