2013-12-15 1 views
6

Я пытаюсь выполнить скрипт Bash Shell с Java, и он отлично работает с использованием этого фрагмента кода.Запустить сценарий оболочки из Java Синхронно

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

Приведенный выше код работает отлично асинхронно. Но я хотел бы добиться выполнения кода синхронно. Я хотел бы, чтобы процесс Java дождался завершения выполнения сценария, а затем выполнил следующую партию кода.

Подводя итог, я хотел бы, чтобы «Операция печати - Сценарий выполнена успешно» для выполнения после командный файл («myscript.sh») завершает выполнение.

Благодаря

+0

взглянуть на этот вопрос http://stackoverflow.com/questions/525212/how-to-run-unix-shell-script-from-java-code –

+1

по ссылке переговоры об использовании Runtime.getRuntime() .exec. Это также асинхронно. Я ищу «синхронное» решение. – user1295300

ответ

14

Вы хотите ждать завершения процесса, то есть waitFor() как этот

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

Спасибо ... Это сработало как шарм. – user1295300

1

Используйте Process#waitFor(), чтобы приостановить код Java, пока скрипт не завершится. Как и в

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

Приведенный выше код не работает, если я хотел, чтобы переместить файл из одного места в другое

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/