2013-12-15 20 views
6

Próbuję wykonać skrypt powłoki Bash z Java i działa dobrze przy użyciu tego fragmentu kodu.Uruchom skrypt powłoki z Java Synchronously

public void executeScript() { 
    try { 
     new ProcessBuilder("myscript.sh").start(); 
     System.out.println("Script executed successfully"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Powyższy kod działa poprawnie asynchronicznie. Ale chciałbym osiągnąć synchroniczne wykonanie kodu. Chciałbym, aby proces Java czekał aż wykonanie skryptu zostanie zakończone, a następnie wykona następną partię kodu.

Podsumowując, chciałbym, aby "Polecenie wydruku - skrypt wykonany pomyślnie" zostało wykonane po plik wsadowy ("myscript.sh") kończy wykonywanie.

Dzięki

+0

spojrzeć na to pytanie http://stackoverflow.com/questions/525212/how-to-run-unix-shell-script-from-java-code –

+1

link rozmowy o użyciu Runtime.getRuntime() .exec. Jest to również asynchroniczne. Szukam rozwiązania "synchronicznego". – user1295300

Odpowiedz

14

chcesz czekać, aż proces się zakończy, to waitFor() jak ten

public void executeScript() { 
    try { 
    ProcessBuilder pb = new ProcessBuilder(
     "myscript.sh"); 
    Process 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(); 
    } 
} 
+0

Dzięki ... To działało jak czar. – user1295300

1

Stosować Process#waitFor() aby wstrzymać kod Java aż skrypt kończy. Jak w

try { 
     Process p = new ProcessBuilder("myscript.sh").start(); 
     int rc = p.waitFor(); 
     System.out.printf("Script executed with exit code %d\n", rc); 
1

Powyższy kod nie działa, gdy chciałem przenieść plik z jednego miejsca do drugiego

class Shell 

{ 

    public static void main(String[] args) { 
    try { 
     ProcessBuilder pb = new ProcessBuilder("/home/sam/myscript.sh"); 
     Process 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(); 
     } 

    } 
} 


myscript.sh 
#!/bin/bash 
mv -f /home/sam/Download/cv.pdf /home/sam/Desktop/