java 调用shell脚本
时间: 2023-07-04 22:31:19 浏览: 124
Java 可以使用 `ProcessBuilder` 或 `Runtime` 类来调用 Shell 脚本。
1. 使用 `ProcessBuilder`
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RunShellScript {
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/path/to/script.sh", "arg1", "arg2");
pb.redirectErrorStream(true);
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("脚本执行完毕,退出码为:" + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
以上代码中,我们使用 `ProcessBuilder` 创建一个进程并执行 Shell 脚本。其中,`/bin/bash` 是 Shell 的路径,`/path/to/script.sh` 是脚本的路径,`arg1` 和 `arg2` 是传递给脚本的参数。`redirectErrorStream(true)` 是将标准错误输出流合并到标准输出流中,以便我们可以同时处理输出信息和错误信息。最后,我们使用 `process.waitFor()` 等待进程执行完毕,并获取进程的退出码。
2. 使用 `Runtime`
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RunShellScript {
public static void main(String[] args) {
try {
Process process = Runtime.getRuntime().exec("/bin/bash /path/to/script.sh arg1 arg2");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("脚本执行完毕,退出码为:" + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
以上代码中,我们使用 `Runtime.getRuntime().exec()` 创建一个进程并执行 Shell 脚本。其中,`/bin/bash /path/to/script.sh arg1 arg2` 是要执行的命令。其余部分和 `ProcessBuilder` 的代码相同。
使用 `ProcessBuilder` 更加灵活,可以设置工作目录、环境变量等参数。而使用 `Runtime` 简单直接,适用于简单的脚本调用场景。
阅读全文
相关推荐












