ubuntuusers.de

BASH-Script: HTML-Seite aufrufen und JAVA-Anwendung starten

Status: Gelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Hallo,

mit einem BASH-Skript generiere ich eine HTML-Datei zur Auswertung und Aktualisierung von JOSM-Daten. Das Skript starte ich mit

bash OSMcheck.sh

Die damit erzeugte HTML-Seite wird am Ende des Skripts geöffnet mit

xdg-open OSMcheck_20201011.html     # Ergebnis HTML-Seite im Browser öffnen

Anschließend startet das Skript die JAVA-Anwendung JOSM mit

java -jar /usr/share/josm/josm.jar  # JOSM starten

Diese HTML-Seite enthält Links für JOSM RemoteControl nach dem Muster

http://127.0.0.1:8111/load_and_zoom?left=12.1234567&right=12.134567&top=48.1234567&bottom=48.134567select=node1234567

Alles funktioniert, mich stört aber, dass die BASH-Konsole geöffnet bleibt und für die Ausführung der JOSM RemoteControl - Befehle jede Menge Ausgaben liefert.

Frage: Kann ich die Aufrufe des oder im BASH-Skript so ausführen, dass nach Durchlauf des Skripts nur noch die HTML-Seite (in Firefox) und JOSM geöffnet sind, die BASH-Konsole aber geschlossen wird?

Danke, Michael

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Probier es mal mit nohup bei dem Java-Aufruf. Dann solltest Du die Shell schließen können.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Unerwünschte Ausgaben kann man unterdrücken, in dem man diese nach /dev/null schreibt/umlenkt:

1
java -jar /usr/share/josm/josm.jar > /dev/null

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke Doc_Symbiosis und user_unknown,

Eure Vorschläge funktionieren und unterdrücken die Ausgaben im Terminal-Fenster. Auch konnte ich mit nohup nach Programm-Durchlauf das Terminal-Fenster manuell (Klick auf 'X') schließen. Gibt es auch eine Möglichkeit, dieses Schließen "per Programmcode" zu erledigen?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Für das Schließen kannst Du einfach "exit" verwenden.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke Doc_Symbiosis,

Für das Schließen kannst Du einfach "exit" verwenden.

Das hatte ich auch gedacht und probiert (in der nohup-Variante): Das Terminal-Fenster bleibt offen! Der Prompt BenutzerName@RechnerName$ kommt zurück, sobald JOSM geschlossen wird, selbst dann bleibt das Terminal-Fenster offen.

Auch ohne den JOSM-Aufruf im Skript und mit letzter Zeile exit bleibt das Terminal-Fenster offen mit Prompt BenutzerName@RechnerName$.

Wäre es eine mögliche (sinnvolle) Variante, eine .desktop-Datei anzulegen mit zwei Exec-Zeilen:

  1. nohup java -jar /usr/share/josm/josm.ja

  2. exec=/Pfad/DateiName.sh und Terminal=false

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13175

michahe schrieb:

Danke Doc_Symbiosis,

Für das Schließen kannst Du einfach "exit" verwenden.

Wenn ich das auf die Schnelle richtig sehe, dann musst Du doch mindestens java in den Hintergrund schicken. xdg-open kommt ja direkt zurück.

Das hatte ich auch gedacht und probiert (in der nohup-Variante): Das Terminal-Fenster bleibt offen! Der Prompt BenutzerName@RechnerName$ kommt zurück, sobald JOSM geschlossen wird, selbst dann bleibt das Terminal-Fenster offen.

Auch ohne den JOSM-Aufruf im Skript und mit letzter Zeile exit bleibt das Terminal-Fenster offen mit Prompt BenutzerName@RechnerName$.

Wie rufst Du das Skript denn auf? Wenn Du sowieso ein Terminal offen hast, wo Du das Skript aufrufst, dann kannst Du natürlich die Shell, die im Terminal läuft, nicht aus dem Skript beenden (jedenfalls nicht ohne ein paar unschöne Tricks).

Wäre es eine mögliche (sinnvolle) Variante, eine .desktop-Datei anzulegen mit zwei Exec-Zeilen:

  1. nohup java -jar /usr/share/josm/josm.ja

  2. exec=/Pfad/DateiName.sh und Terminal=false

Leg doch eine Desktop-Datei an, mit Deinem Skript.

Übrigens würde ich das Skript "OSMcheck" nennen und eine ordentliche Shebang-Zeile eintragen. Das stellt sicher, dass immer der richtige Interpreter (Du willst die /bin/bash) genommen wird.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke rklm

Wie rufst Du das Skript denn auf? Wenn Du sowieso ein Terminal offen hast, wo Du das Skript aufrufst, dann kannst Du natürlich die Shell, die im Terminal läuft, nicht aus dem Skript beenden (jedenfalls nicht ohne ein paar unschöne Tricks).

Da lag eines der Probleme:

  • Ich öffne eine Konsole und gebe dort bash DateiName.sh ein → Nach Programmdurchlauf sind wie gewünscht Firefox und JOSM geöffnet aber es bleibt die Konsole offen (ist ja eigentlich logisch).

  • Ich starte DateiName.sh → Nach Programmdurchlauf sind nur wie gewünscht Firefox und JOSM geöffnet. So soll es sein.

Nun habe ich eine .desktop angelegt (die ich sowieso möchte) und dort eingetragen:

Exec="/Pfad/yy/xx/DateiName.sh"

Was ich nicht verstehe: Das direkt gestartete Script funktioniert und liefert alle gewünschten Ausgaben, starte ich mit .desktop läuft es durch, liefert aber keine der Ausgaben. Wo kann ich suchen?

Danke, Michael

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke an alle. Für den Skript-gesteuerten Aufruf einer Datei muss für die .desktop.Variante ein absoluter Pfad mitgegeben werden:

Directory="/Pfad/xxx/y y y"
cat poi_lastcheck.ql                  # funktioniert mit Doppelklick auf Skript.sh
cat "$Directory"/poi_lastcheck.ql     # funktioniert bei Start mit .desktop

Mein Problem ist wohl gelöst.

Antworten |