Java Shell commands

JavaBeginner

Ensign
Registriert
Juli 2015
Beiträge
142
Hallo, ich habe ein kleines Problem mit dem Ausführen von shell commands.
Code:
Runtime.getRuntime().exec("su - "+account);
Runtime.getRuntime().exec("./update.sh");
Runtime.getRuntime().exec("./check.sh");
Runtime.getRuntime().exec("exit");
Wo genau ist hierbei mein Fehler? Das hält mich jetzt schon diverse Stunden auf und ich habe die verschiedensten methoden ausprobiert. Als Process, so wie oben über writer etc.
Danke schon mal für eure Hilfe :)
 
Und die Forenmitglieder sollen jetzt raten, was genau dein Problem ist und was du erreichen möchtest?
 
KillerCow schrieb:
Und die Forenmitglieder sollen jetzt raten, was genau dein Problem ist und was du erreichen möchtest?
Sorry das es nicht so richtig rüberkam^^
Das Problem ist, es wird z.b. nicht der su command ausgeführt. Mir ist jedoch nicht klar weshalb. es scheint direkt zum nächsten zu springen (update.sh) und es auszuführen. Das klappt jedoch nicht da es nicht in dem homeverzeichniss des benötigten users ist.
 
Mit Runtime.getRuntime().exec legst Du jedesmal einen neuen Prozess an. Ich glaube aber, dass Du die Befehle in einem Prozess ausführen willst ...
 
Andreas_ schrieb:
Mit Runtime.getRuntime().exec legst Du jedesmal einen neuen Prozess an. Ich glaube aber, dass Du die Befehle in einem Prozess ausführen willst ...

Das habe ich ebenfalls probiert, jedoch ohne Erfolg. Ich habe auf stackoverflow mehrfach gelesen das man für jeden Befehl einen neuen Prozess anlegen sollte. Habe das mal in der Hoffnung das es mein Problem löst probiert...was es jedoch leider nicht hat :rolleyes:
 
JavaBeginner schrieb:
Ich habe auf stackoverflow mehrfach gelesen das man für jeden Befehl einen neuen Prozess anlegen sollte.
Das kann aber nicht funktionieren, wenn die einzelnen Befehle aufeinander angewiesen sind. Auch habe ich auf stackoverflow nur das Gegenteil von dem gelesen, was Du behauptest.
Hier ein Beispiel:
How can I run multiple commands in just one cmd windows in Java?
Ein weiteres Beispiel:
Run consecutive Commands Linux with java runtime exec
 
Zuletzt bearbeitet:
Schon die Fehlerausgabe ausgelesen und geprüft?

Mit Runtime.exec(String, String[], File) kann man das Arbeitsverzeichnis festlegen. Ich würde allerdings ProcessBuilder verwenden.
 
Andreas_ schrieb:
Das kann aber nicht funktionieren, wenn die einzelnen Befehle aufeinander angewiesen sind. Auch habe ich auf stackoverflow nur das Gegenteil von dem gelesen, was Du behauptest.
Hier ein Beispiel:
How can I run multiple commands in just one cmd windows in Java?
Ein weiteres Beispiel:
Run consecutive Commands Linux with java runtime exec

Wie könnte man das dann lösen? Ich ging davon aus das die Befehle nacheinander abgearbeitet werden und die “Aktion“ die dadurch ausgeufert wird bestehen bleibt.
 
Hast Du die beiden Links nicht angesehen? Du kannst Runtime.exec entweder einen String übergeben, der alle Befehle enthält - dann parst Runtime.exec die Befehle selbst und führt sie nacheinander aus oder Du legst ein String-Array mit den einzelnen Befehlen an und übergibst das an Runtime.exec.

Beim ersten Link ist auch ein Beispiel dabei, wie Du das alternativ mit dem ProcessBuilder lösen kannst.
 
Zuletzt bearbeitet:
Alles klar, danke. Ist etwas schwer das am Handy alles anzuschauen :)
Werde es morgen direkt machen. Danke für eure Hilfe.
 
ein paar halbherzige kommentare.
Code:
Runtime.getRuntime().exec("su - "+account);
su erfordert typischerweise interaktive eingabe des passworts. da wirst du den OutputStream/InputStream des durch exec() erzeugten Process verwenden muessen um auf den prompt zu warten und dann das passwort einzugeben.
Code:
Runtime.getRuntime().exec("./update.sh");
funktioniert vermutlich so nicht. damit du ./script.sh ausfuehren kannst muessen zwei dinge gegeben sein: 1. die datei ist als executable markiert und 2. die shell findet einen shebang mit interpreterpfad. das problem hier ist, dass Runtime.exec() vermutlich (hier kann ich falsch liegen) nicht wie eine shell agiert und somit das script nicht dem interpreter uebergeben kann. und dann wird halt nix ausgefuehrt
Code:
Runtime.getRuntime().exec("./check.sh");
s.o.
Code:
Runtime.getRuntime().exec("exit");
sinnlos, da du keine shell startest.
 
Zurück
Oben