Shell Script Aufruf mit Java

tk

Mitglied
Hallo,

kann mir jemand einen Tipp geben wie man ein Shell-Script unter Cygwin mit Java aufruft bzw. wie man überhaupt mehrere Befehle hintereinander aufruft?

Folgendes funktioniert so nicht:

Java:
Process p=Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash --login -i -c sh test.sh <cmd>");


Grundsätzlich funktioniert es aber wenn beispielsweise nur ls abgefragt wird:

Java:
Process p=Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash --login -i -c ls <cmd>");

Danke.
 

Andi_CH

Top Contributor
Vorweg: Ich schiesse ins Blaue. Ich kenne zwar shell und shellsripts aber den Aufruf uas java habe ich nie impementiert.

Warum
Code:
sh test.sh
? Ich weiss nicht ob der Aufruf mit 2 Parametern klar kommt

Setz doch das executable bit bei test.sh.
Und wenn test.sh nicht im suchpfad ist, empfiehlt sich der Aufruf z.B. mit ./test.sh, ~/test.sh oder was auch immer der Pfad zum file ist.
 

tk

Mitglied
Danke.

Also nur test.sh funktionierte nicht, obwohl es im Suchpfad ist, dafür hat ./test.sh aber geklappt.

Noch eine Frage, in dem Shell-Script wird eine auch Textdatei verarbeitet, diese würde ich gern aus Java als Parameter an das Shell-Script mit übergeben. Wie würde dann der Aufruf aussehen?
 

Andi_CH

Top Contributor
Du stellst ???:L Ich kann nicht mal den Fall mit ls nachvollziehen :D

Aufgrund der Pfade muss ich annehmen, dass du das Programm aus der Windowswelt startest.
Sollte das nicht aus einer cygwin shell gestartet werden?

"C:/cygwin/bin/bash --login -i -c ./test.sh <cmd>" (ja Pfade können auch mit / geschrieben werden)
"C:/cygwin/bin/bash --login -i -c ls <cmd>"

wie auch die aus der cygwinshell gestarteten Vanten mit
"bash --login -i -c ~/test.sh <cmd>";
"bash --login -i -c ls <cmd>";

führen alle zu einer IllegalMonitorStateException - auch wenn ich es aus einer cygwin shell starte.

Parameter übergibt man man beim Aufruf
Code:
test.sh parameter1 parameter2
und innerhalb des scriptes greift man mit $1 und $2 darauf zu. $0 ist der Name des scriptes

EDIT: Ich hab mich soeben überzeugt - manuell (cmd-box) klappt es auch aus der Windowswelt
 
Zuletzt bearbeitet:

tk

Mitglied
Java:
 test.sh parameter1 parameter2
funktioniert so nur in der Konsole.

In der Java-Anweisung klappt das allerdings nicht:
Java:
 Process p=Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash --login -i -c ./test.sh ./daten.txt <cmd>")

Irgendjemand eine Idee?
 

Andi_CH

Top Contributor
Eigentlich habe ich es dir ja vorgenmacht, aber ich kann auch mit dem Zaunpfahl winken.
WAS geht schief?
WAS passiert.

Ach noch was - was soll das <cmd> hinten an deinen Strings. Lass die mal weg.
Ach noch was - wie heisst denn das bash-Programm genau? Schau mal nach.

Vermutlich kommst du dann auch auf die Idee das mal so zu probieren.
übrigens waitFor ist wichtig, sonst werden Prozesse abgeschossen bevor sie Laufzeit bekamen.

Was nicht klappt ist die Parameterübergabe an das script - es erstellt mir ein file .txt, das heisst dass $1 leer ist

EDIT: Auch das ist gelöst:
Java:
	String command1 = "C:/cygwin/bin/bash.exe --login -i -c \"~/test.sh tilde\"";

Java:
import java.io.IOException;

public class Test {

	private static void execute(String pCmd) {
		System.out.println("Versuche " + pCmd + " auszuführen");
		try {
			Process p = Runtime.getRuntime().exec(pCmd);
			int retVal = p.waitFor();
			System.out.println("geschafft. Returnwert = " + retVal);
		} catch (IOException ioexp) {
			ioexp.printStackTrace();
		} catch (InterruptedException iexp) {
			iexp.printStackTrace();
		}
	}

	public static void main(String[] args) {
		String command2 = "C:/cygwin/bin/bash.exe --login -i -c ~/test.sh tilde";
		String command3 = "C:/cygwin/bin/bash.exe --login -i -c ./test.sh punkt";
		execute(command2);
		execute(command3);
	}
}

und test.sh:
Code:
#!/bin/sh
touch ~/$1.txt
 
Zuletzt bearbeitet:

tk

Mitglied
Ja super danke. So hat es jetzt geklappt:

Java:
Process p=Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash --login -i -c \"./test.sh equakes.txt\"");
 

tk

Mitglied
Habe da jetzt noch ein Problem. Der Prozess wird ja wie oben beschrieben gestartet. Parameterübergabe funktioniert auch, jedoch läuft das Shell-Script nicht komplett durch.
Im Shell-Script soll mit wget etwas heruntergeladen werden und dann mit unzip entpackt werden. Doch der Download beginnt, wird aber nicht zu Ende geführt, bis die Ausführung in Java abgebrochen wird.

Habe noch den Hinweis gefunden, das man die Streams schließen soll sonst blockiert waitFor() alles.

Java:
process.getErrorStream().close();
process.getInputStream().close();
process.getOutputStream().close();

process.waitFor()

Jetzt wird zumindest alles richtig heruntergeladen, das entpacken mit unzip funktioniert allerdings immer noch nicht.

Hat jemand eine Idee, es scheint ja an Java zu liegen, da das Shell-Script in der Konsole funktioniert. Danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Shell Script ausführen Java Basics - Anfänger-Themen 5
L Shell Script ausführen in Java Java Basics - Anfänger-Themen 4
P ein Java Script mit Shell/Bash launchen? Ubuntu Java Basics - Anfänger-Themen 3
G java shell script starten und befehl übergeben Java Basics - Anfänger-Themen 3
S Shell Script ausführen unter Java Java Basics - Anfänger-Themen 5
E Shell: Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 3
A Erste Schritte Programm in Shell mit bestimmter Java-Version aufrufen Java Basics - Anfänger-Themen 10
H Shell Command, im Hintergrund Java Basics - Anfänger-Themen 2
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
L SHELL-Scripte als root ausführen Java Basics - Anfänger-Themen 5
A Shell erfolgreich verlaufen oder Fehler gehabt Java Basics - Anfänger-Themen 4
S javac - Rückgabewerte an die Shell Java Basics - Anfänger-Themen 10
S Shell zeigt keine Scrollbars Java Basics - Anfänger-Themen 2
M shell als Typ auflösen Java Basics - Anfänger-Themen 12
K Shell Befehle mit Java aufrufen Java Basics - Anfänger-Themen 5
G Unix Shell Subroutine ausfuehren Java Basics - Anfänger-Themen 3
O Java- File in Shell/Terminal/etc. öffnen Java Basics - Anfänger-Themen 8
K Java-Programm mittels Shell-Skript aufrufen Java Basics - Anfänger-Themen 3
C Windows Shell mit JAVA öffnen Java Basics - Anfänger-Themen 12
T Sortierte Ausgabe in der Shell Java Basics - Anfänger-Themen 4
S Shell-Skripte per Java aufrufen? Java Basics - Anfänger-Themen 5
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
L Bubblesort in Batch Script Java Basics - Anfänger-Themen 15
J script: jar Datei starten auf Mac Os Java Basics - Anfänger-Themen 2
E Compiler-Fehler Javac Windows vs Ubuntu /Script vs Konsole Java Basics - Anfänger-Themen 4
pkm javax.script.ScriptException bei der ScriptEngine Java Basics - Anfänger-Themen 9
H Kaseya2 Script Packs Java Basics - Anfänger-Themen 0
H Script ausführen wenn Browser Notification eingetroffen ist? Java Basics - Anfänger-Themen 3
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
B Java Script Zufallshintergrund Java Basics - Anfänger-Themen 2
M Script für Externes Programm Java Basics - Anfänger-Themen 6
T Änderung an Script Java Basics - Anfänger-Themen 6
D Compiler-Fehler ANT-Script geht nicht Java Basics - Anfänger-Themen 6
S Lightbox Script vs. Taco HTML Script Java Basics - Anfänger-Themen 4
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
3 Erste Schritte benötige hilfe bei diesem Script Java Basics - Anfänger-Themen 2
D script.aculo.us requires the Prototype JavaScript framework >= 1.6.0.2 Java Basics - Anfänger-Themen 2
H sprung zu einem anderen punkt im script Java Basics - Anfänger-Themen 11
M Script Verbessern Java Basics - Anfänger-Themen 8
B Script Text Zeichen Suche funktioniert nicht Java Basics - Anfänger-Themen 7
B Wo ist der Fehler in meinem Script Java Basics - Anfänger-Themen 4
L vb-Script in Java ausführen Java Basics - Anfänger-Themen 3
G Datei an PHP Script senden und speichern Java Basics - Anfänger-Themen 2
V suche nach nsis script für java applikation Java Basics - Anfänger-Themen 2
G Java-Klasse aus Java-Script aufrufen Java Basics - Anfänger-Themen 3
D kleines script abhaengig von Ordner Bilder kopieren Java Basics - Anfänger-Themen 11
G nach action Script aufrufen Java Basics - Anfänger-Themen 3
zilti PHP-Script aufrufen und Rückgabe lesen Java Basics - Anfänger-Themen 2
L Java Applet/Script wird nicht angezeigt. Java Basics - Anfänger-Themen 3
M ANT-Script - Fehlermeldung wegbekommen Java Basics - Anfänger-Themen 6
J java script mit java parsen Java Basics - Anfänger-Themen 6
J Script funktioniert nicht. Java Basics - Anfänger-Themen 4
S einfaches script mit Eingabeaufforderung starten (javac) Java Basics - Anfänger-Themen 8
O Post senden an php script. Java Basics - Anfänger-Themen 20
K VB-Script ausführen Java Basics - Anfänger-Themen 6
Turkey@mp3 Brauche nen Titelauswahl/wunsch script Java Basics - Anfänger-Themen 3
C kleines Java script mit Frage Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
J Klassen Reihenfolge beim Aufruf von Klassen Java Basics - Anfänger-Themen 1
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
O Frage zum Aufruf überladener Methoden Java Basics - Anfänger-Themen 4
G funktions Aufruf aus GUI Java Basics - Anfänger-Themen 9
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
W Zeitversetzter Aufruf der Methoden Java Basics - Anfänger-Themen 6
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben