2013-12-15 160 views
6

我想从Java执行一个Bash Shell脚本,它使用这段代码运行正常。从Java同步运行shell脚本

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/