小编典典

将参数从Java程序传递到bash脚本,该bash脚本使用参数调用另一个Java程序

java

我想在我的Java程序中执行shell脚本,并传递如下所示的参数:

Runtime.getRuntime().exec("./test.sh " + "\\\"param1\\\"\\\"param2\\\"\\\"param3\\\"");

然后test.sh将调用另一个传递字符串参数的java程序,如下所示:

another.jar \"param1\"\"param2\"\"param3\"

最后程序anther.jar将以这种格式解释参数

another.jar "param1""param2""param3"

我对此感到有些困惑,因为在这种情况下我无法正确处理转义字符。

我在第一个命令中尝试了一些字符串格式,但没有获得正确的格式。

一些帮助就可以了!

谢谢!


阅读 233

收藏
2020-11-30

共1个答案

小编典典

我认为您最好使用 exec(String []
cmdarray)

而不是 exec(String
cmd)

。这是因为 exec(String
cmd)

通过
StringTokenizer

标记了参数,而在分解命令行参数时根本不注意双引号。

尝试这样的事情:

ArrayList<String> argList = new ArrayList<String>();
argList.add("param1");
argList.add("param2");
argList.add("param2");
String[] args = argList.toArray(new String[argList.size()]);
Runtime.getRuntime().exec("mycommand", args);

除了Java源代码字符串文字可能需要转义外,param值内的字符不需要引号或转义。

2020-11-30