传递参数从java程序到bash脚本,该脚本使用参数调用另一个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"
我有点混淆这种情况因为在这种情况下我无法正确处理逃脱字符..kkk
我在第一个命令中尝试了一些字符串格式,但是我没有得到正确的格式。
一些帮助就好了!
谢谢!
我认为你最好使用exec(String [] cmdarray)而不是exec(String cmd) 。 这是因为exec(String cmd)通过StringTokenizer对参数进行了标记,而StringTokenizer在分解命令行参数时根本不会注意双引号。
尝试这样的事情:
ArrayList argList = new ArrayList (); argList.add("param1"); argList.add("param2"); argList.add("param2"); String[] args = argList.toArray(new String[argList.size()]); Runtime.getRuntime().exec("mycommand", args);
param值中的字符不应该引用或转义,除非Java源代码字符串文字可能需要转义。
使用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]); }