如何使用Java ProcessBuilder在同一进程中执行多条Linux命令
解决方案
要在同一个bash进程内执行多条命令,直接将多条命令按执行顺序拼接在bash -c的参数中即可,无需多次启动ProcessBuilder。同时需要等待进程执行完成再判断执行结果,避免进程仍在运行时误判状态。
修正后完整代码
public void Shell(){ try { File dir = new File("/Users/yhlee/Documents"); // 按顺序拼接命令:创建文件 -> 等待1秒 -> 删除文件 String cmd = "touch commandTest.txt && sleep 1 && rm commandTest.txt"; ProcessBuilder pb = new ProcessBuilder(new String[]{"/bin/bash", "-c", cmd}); pb.directory(dir); Process process = pb.start(); // 阻塞等待进程执行完成,获取退出码判断执行结果 int exitCode = process.waitFor(); if (exitCode == 0) { log.info("shell succeeded"); } else { log.info("shell execution failed, exit code: {}", exitCode); } }catch (Exception e){ e.printStackTrace(); log.info("Error.Running.CMD"); } }
注意事项
- 命令拼接使用
&&时,仅当前一条命令执行成功才会执行后一条命令;如果需要忽略前序命令的执行结果,强制按顺序执行所有命令,可以将&&替换为; - 必须调用
process.waitFor()等待进程执行结束,否则代码会在启动进程后直接向下执行,此时命令可能还未完成运行 - 若出现命令执行失败的情况,可以读取进程的
getErrorStream()输出内容,方便定位具体报错原因
内容的提问来源于stack exchange,提问作者user17085185
相关产品推荐
相关产品推荐

