2016-07-13 11 views
3

Ich habe den folgenden Java-Code, der mein run.sh-Skript ausführen sollte.run.sh läuft nicht mit Process Builder

public void executeScript() { 
    try { 
     Process p = null; 
     ProcessBuilder pb = new ProcessBuilder("phoneManagement/src/run.sh"); 
     //pb.directory(new File("phoneManagement/src")); 

     p = pb.start();  // Start the process. 
     p.waitFor();    // Wait for the process to finish. 
     System.out.println("Script executed successfully"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

Und die run.sh sieht wie folgt aus:

#!/bin/sh 
javac -cp ".:../../selenium/selenium-java-2.53.1.jar:../../selenium/selenium-server-standalone-2.53.1.jar:../../selenium/libs/*" phoneManagement.java 
java -cp ".:../../selenium/selenium-java-2.53.1.jar:../../selenium/selenium-server-standalone-2.53.1.jar:../../selenium/libs/*" phoneManagement 

Wenn ich das .sh-Skript von der Kommandozeile tut es laufen, was es soll und mein phoneManagement kompiliert und ausgeführt.

Wenn ich meine executeScript-Klasse verwende, bekomme ich die Meldung "Skript wurde erfolgreich ausgeführt", obwohl run.sh nicht das getan hat, was es sollte.

kann mir jemand dabei helfen?

Thanx

+0

Versuchen Sie es mit einem vollständigen Pfad. Es ist wahrscheinlich, dass der Befehl fehlschlägt, aber ich denke nicht, dass es eine Ausnahme geben wird. Versuchen Sie, die Ausgabe des Befehls auszugeben. – 123

Antwort

0

Sie könnten versuchen:

Process builder pb = new ProcessBuilder ("bash", "-c", "/path/to/shell/script/run.sh");

0

Sie entweder vollständigen Pfad zum Skript "/foo/bar/script.sh" oder verwenden relativen Pfad mit Punkt am Anfang "./script.sh" angeben müssen. Vergessen Sie auch nicht chmod +x script.sh und fügen Sie am Anfang des Skripts richtig shebang #!/usr/bin/env bash hinzu.