簡體   English   中英

從Java Synchronously運行shell腳本

[英]Run shell script from Java Synchronously

我試圖從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();
  }
}

如果我想將文件從一個位置移動到另一個位置,上面的代碼不起作用,所以我用下面的代碼修復了它。

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/

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM