java - 执行 bash 脚本并从 java 传递带空格的参数

标签 java bash exec

我知道有很多关于从 Java 执行命令的帖子,但我就是无法让它工作。这就是我想要做的,我有一个 bash 脚本,它接收 2 个参数,可能有空格,也可能没有空格,然后从 Java 执行脚本并像这样传递参数(我用引号将参数括起来,并用反斜杠转义它们):

String cmd = "/opt/myScript  \"/opt/myPath1\"  \"/opt/myPath2 with spaces\"";
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);

我还尝试使用 ProcessBuilder 类,如下所示:

String myScript = "/opt/myScript";
String myArg1= "/opt/myPath1";
String myArg2 = "/opt/myPath2 with spaces";
ProcessBuilder pb = new ProcessBuilder(myScript , myArg1, myArg2);
pb.start;

已成功接收不带空格的参数,但我对第二个参数仍有问题。

我认为 ProcessBuilder 类可以处理空格,但似乎我遗漏了一些东西。

我不确定它是否有什么关系,但以防万一,这是我的脚本:

#!/bin/bash
PATH=$PATH:$1
gnome-terminal --working-directory $2

$1$2 是从 Java 发送的参数。

最佳答案

遇到同样的问题,最后解决了:

Runtime.getRuntime().exec(new String[]{"bash", "-c", <command with spaces>});

关于java - 执行 bash 脚本并从 java 传递带空格的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712966/

相关文章:

bash - 执行 JAR 时禁用箭头键

windows - Ant exec - 无法运行程序 'start' CreateProcess 错误 = 2

c - execv和execve的区别

java - RxJava 如何订阅一个 Subject 到一个 Observable

java - 如何使用 MATLAB 数组作为 HashMap java 对象的键?

linux - sed 用特殊字符替换数字,除了一行中的最后一个字符串

linux - bash: child setpgid (5870 to 5870): docker 上没有这样的进程

PHP exec : hangs, 不继续到下一行

java - Filenet 中通过 EJB 传输的事务管理

java - JClouds RackspaceUK 无法启动服务器