将参数从java程序传递给使用参数调用另一个java程序的bash脚本

时间:2010-11-19 01:50:02

标签: java bash parameters arguments escaping

我想在我的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"

我有点混淆这种情况因为在这种情况下我无法正确处理逃脱字符..kkk

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

一些帮助会很好!

THX!

2 个答案:

答案 0 :(得分:5)

使用ProcessBuilder。这些参数没有什么特别的需要,它们只是涓涓细流。

//ProcessBuilder pb = new ProcessBuilder("test.sh", "param1", "param2", "param3");
ProcessBuilder pb = new ProcessBuilder("test.sh", "param1 " + "param2 " + "param3");
pb.start();

在test.sh中:

java -jar program2 $1 # Or however you want to call it.

在program2.java中

public static void main(String[] args)
{
   System.out.println(args[0]);
}

答案 1 :(得分:3)

我认为您最好使用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);

param值中的字符不应该引用或转义,除非Java源代码字符串文字可能需要转义。