【发布时间】:2015-07-29 23:39:48
【问题描述】:
我知道有很多关于从 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 发送的参数。
【问题讨论】:
-
你有什么问题?您的脚本通过
ProcessBuilder接收哪些值? -
你还需要在shell脚本中引用变量的展开。否则,shell 会在空格上分词。 (从技术上讲,它不会在分配行上执行此操作,但如果您想更加确定,引用那里会更安全。)
-
@Elliott,它现在可以工作了,我只是用引号将两个变量
$1和$2括起来,我想它也可以在 Mac 上工作,谢谢。