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

Windows下Java ProcessBuilder在Git Bash中传递带引号参数的问题

解决Windows下Java调用Git Bash传递带引号参数的问题

在Git Bash中执行以下命令可正常运行:

./script.sh -s "run:3-20-1-10000;10000;" mq

但在Windows环境下用Java调用Git Bash执行该命令时,两种尝试均失败:

失败尝试1:拆分参数构建ProcessBuilder

String[] cmd = {"C:\\Program Files\\Git\\bin\\bash.exe", "-c" , "./script.sh"};
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.cmd.add("-s");
pb.cmd.add("\"run:3-20-1-10000;10000;\"");
pb.cmd.add("mq");
File newDir = new File("C:\\..\\");
pb.directory(newDir);
Process p=pb.start();

无报错但无预期结果,原因是-c参数要求后面跟完整的命令字符串,而这里./script.sh被当作-c的唯一参数,后续的-s、带引号的参数和mq会被当成bash自身的参数,而非传递给script.sh。

失败尝试2:整段命令作为-c参数

String[] cmd = {"C:\\Program Files\\Git\\bin\\bash.exe", "-c", "./script.sh -s \"run:3-20-1-10000;10000;\" mq"};
ProcessBuilder pb = new ProcessBuilder(cmd);
Process p = pb.inheritIO().start();

出现错误:

unknown option
10000: command not found
mq: command not found

原因是Java字符串中的转义双引号传递给bash后,被错误解析导致引号丢失,分号;被bash识别为命令分隔符,进而把10000和mq当作独立命令执行。


正确解决方案

方案1:用单引号包裹带特殊字符的参数

在bash中,单引号会完全保留内部内容,不会解析分号等特殊字符,适合传递包含分号的参数:

// 替换为实际的Git Bash路径和脚本目录
String bashPath = "C:\\Program Files\\Git\\bin\\bash.exe";
File scriptDir = new File("C:\\path\\to\\your\\script\\directory");

// 用单引号包裹带分号的参数,避免bash解析分号
String command = "./script.sh -s 'run:3-20-1-10000;10000;' mq";

ProcessBuilder pb = new ProcessBuilder(bashPath, "-c", command);
pb.directory(scriptDir);
Process p = pb.inheritIO().start();
// 等待进程执行完成
p.waitFor();

方案2:转义双引号(适用于必须用双引号的场景)

如果需要使用双引号,需在Java字符串中对双引号进行双重转义(Java用\\表示bash中的\),确保bash能正确识别引号:

String bashPath = "C:\\Program Files\\Git\\bin\\bash.exe";
File scriptDir = new File("C:\\path\\to\\your\\script\\directory");

// Java中用\\转义,bash最终收到的是\"包裹的参数
String command = "./script.sh -s \\\"run:3-20-1-10000;10000;\\\" mq";

ProcessBuilder pb = new ProcessBuilder(bashPath, "-c", command);
pb.directory(scriptDir);
Process p = pb.inheritIO().start();
p.waitFor();

内容的提问来源于stack exchange,提问作者user1207289

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:42:37