从Java Synchronously运行shell脚本

时间:2013-12-15 07:51:24

标签: java bash shell synchronous

我正在尝试从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”)完成执行后,执行“打印语句 - 成功执行脚本”。

由于

3 个答案:

答案 0 :(得分:17)

你想等待进程完成,就像这样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();
  }
}

答案 1 :(得分:2)

如果我想将文件从一个位置移动到另一个位置,上面的代码不起作用,所以我用下面的代码修复了它。

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/

答案 2 :(得分: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);