我首先要说的是,我发现了许多与我相似的主题,但没有一个能够为我提供正确答案。
我尝试使用以下shell脚本将字符串插入xml文件中:
#!/bin/bash
cd /var/lib/tomcat7/webapps/Config || exit
sudo sed -i '/<\/home>/i <entry>'"$@"'</entry>' data.xml
当执行这样的脚本./script.sh&#34; test entry&#34;时,我的xml文件将如下所示:
<home>
<entry>test entry</entry>
</home>
这就是我想要的。但是,当我尝试通过java调用此脚本时,我无法成功地转义引号。
我的java代码是这样的:
String entry = "test entry";
String command = "/home/user/addentry.sh " + "\"" + entry + "\"";
Process p = null;
Runtime run = Runtime.getRuntime();
try {
p = run.exec(command);
}
.....
执行代码时,我的xml文件如下所示:
<home>
<entry>"test
</home>
正如您所看到的,引用也是作为我输入的一部分传递的。 将java代码更改为:
时String command = "/home/user/addentry.sh " + entry;
它适用于没有空格的字符串(因此脚本只有1个参数)
提前致谢
答案 0 :(得分:0)
试试这个:
package org.script.test;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Invalid arguments");
return;
}
String entry="\"" +args[0]+ "\"";
System.out.println("adding: " + entry);
Process pr = null;
try {
pr =
Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/oracle/testscript ; . ./test.sh " + entry });
} catch (IOException e) {
e.printStackTrace();
}
}
}
被叫:
假设包org.script.test
java -Xms128M -Xmx128M -classpath testScript.jar org.script.test.Main "test entry"
即使您没有传递参数,它仍然有效:
package org.mihai.script;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
String entry = "test entry 2";
System.out.println("adding: " + entry);
Process pr = null;
try {
pr =
Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/oracle/testscript ; . ./test.sh " + "\"" + entry +"\"" });
} catch (IOException e) {
e.printStackTrace();
}
}
}
呼叫:
java -Xms128M -Xmx128M -classpath testScript.jar org.mihai.script.Main
输出data.xml:
<home>
<entry>test entry</entry>
<entry>test entry 2</entry>
</home>