2013-12-15 32 views
6

Sto provando a eseguire uno script Bash Shell da Java e funziona correttamente utilizzando questo pezzo di codice.Esecuzione script shell da Java in modo sincrono

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

Il codice sopra riportato funziona in modo asincrono. Ma quello che vorrei ottenere è eseguire il codice in modo sincrono. Vorrei che il processo Java attendesse fino al completamento dell'esecuzione dello script e quindi eseguisse il successivo batch di codice.

Per riassumere, desidero eseguire "Stampa istruzione - Script eseguito correttamente" dopo il il file batch ("myscript.sh") completa l'esecuzione.

Grazie

+0

un'occhiata su questa questione http://stackoverflow.com/questions/525212/how-to-run-unix-shell-script-from-java-code –

+1

I collegamenti parla usando Runtime.getRuntime() .exec. Anche questo è asincrono. Sto cercando una soluzione "sincrona". – user1295300

risposta

14

Si vuole attendere che il processo finisca, cioè waitFor() come questo

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

Grazie ... Ha funzionato come un fascino. – user1295300

1

Utilizzare Process#waitFor() per mettere in pausa il codice Java finché lo script termina. Come in

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

Il codice di cui sopra non funziona se volevo spostare un file da una posizione a un'altra

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/ 
Problemi correlati