2

Просто небольшая проблема. Я пишу простой скрипт bash, который запускает и останавливает Jetty. Когда я его выполняю, скрипт сразу же возвращает курсор назад на приглашение bash. Однако, когда Jetty запускается и записывает свой вывод инициализации обратно в stdout, он оставляет курсор на отдельной строке (без запроса), пока я не введу команду или не нажму Enter. Плохо, я знаю, но я думаю, что есть простой способ избежать этого, который я пропускаю.

Вот сценарий:

#!/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 SelectChannelConnector@0.0.0.0:8080 STARTING

И курсор заканчивается на пустой новой строке чуть ниже. Есть ли способ предотвратить это? Я довольно новичок в написании сценариев bash. Должен ли я что-то делать, а я нет?

2 ответа2

4

Вы не можете легко предотвратить это - bash вообще не получает никакого сигнала, когда фоновый процесс пишет в терминал, только когда он полностью завершается. (SIGTTOU доставляется только процессу записи, в данном случае Java, который не имеет никакого контроля над отображением приглашения ...)

0

Вы можете перенаправить вывод в файл для команд Java

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .