Java调用Shell脚本的核心方法是通过ProcessBuilder
或Runtime.exec()
启动外部进程,关键点包括参数传递、输出流处理和错误管理,适用于系统级任务自动化。
-
基础实现
使用Runtime.exec()
直接执行脚本路径,例如:java复制
Process process = Runtime.getRuntime().exec("/path/to/script.sh");
通过
ProcessBuilder
更灵活,支持设置工作目录和环境变量:java复制
ProcessBuilder builder = new ProcessBuilder("/path/to/script.sh", "param1", "param2"); builder.directory(new File("/working/dir")); Process process = builder.start();
-
参数与输出处理
脚本参数通过command()
方法传递,输出流需用BufferedReader
读取:java复制
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); while ((line = reader.readLine()) != null) { System.out.println(line); }
错误流需单独处理以避免阻塞,返回码通过
waitFor()
获取。 -
安全与兼容性
确保脚本有可执行权限(chmod +x
),参数需校验防注入。跨平台时注意路径分隔符(如Windows用\\
)和Shell解释器差异(如#!/bin/bash
)。 -
EEAT优化建议
- 经验:示例代码需基于实际项目调试,如超时处理或异步调用。
- 专业:引用官方文档说明
ProcessBuilder
优于Runtime
的线程安全性。 - 权威:建议结合Spring Batch等框架管理复杂任务。
- 可信:强调异常捕获(
IOException
、InterruptedException
)和资源释放(关闭流)。
掌握这些方法可高效集成Shell脚本,但需根据场景权衡性能与安全性。