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