You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:45:03