从Java Synchronously运行shell脚本

我试图从Java执行Bash Shell脚本,并使用这段代码运行良好。

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

上面的代码异步运行。 但我想要实现的是同步执行代码。 我希望Java进程等到脚本执行完成后再执行下一批代码。

总而言之,我希望在批处理文件(“myscript.sh”)完成执行执行“打印语句 – 成功执行脚本”。

谢谢

你想等待Process完成,就是这样的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(); } } 

使用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); 

如果我想将文件从一个位置移动到另一个位置,则上述代码不起作用

 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/