Java Runtime.exec以字符串形式转义参数
由于使用框架,我只能控制Java Runtime.exec以字符串形式转义参数,java,runtime,exec,Java,Runtime,Exec,由于使用框架,我只能控制Runtime.getRuntime().exec(string)的命令字符串,因此没有数组 问题是,我需要传递一些转义参数,但它似乎不起作用 举个例子:wget-qO----发布数据“2”--http://192.168.3.33/data/changes.xml。在shell中工作得非常好,但是由于没有得到正确的响应(很可能是因为数据无效),所以有些事情搞砸了 编辑:链接到代码 正如我所说,我无法控制这一切。。。我需要在一个字符串中完成它:( 考虑到这个限制,没有直接
Runtime.getRuntime().exec(string)
的命令字符串,因此没有数组
问题是,我需要传递一些转义参数,但它似乎不起作用
举个例子:wget-qO----发布数据“2”--http://192.168.3.33/data/changes.xml
。在shell中工作得非常好,但是由于没有得到正确的响应(很可能是因为数据无效),所以有些事情搞砸了
编辑:链接到代码
正如我所说,我无法控制这一切。。。我需要在一个字符串中完成它:(
考虑到这个限制,没有直接的解决方案
显然,exec(String)
不理解任何形式的转义或引用。它使用空格字符作为参数分隔符将字符串拆分为命令名和多个参数。这种行为是硬连接的……并有文档记录
可能的解决办法是:
- 自己进行拆分,并使用
exec(String[])
- 找一个壳来进行拆分;例如
String cmd = "wget -qO- --post-data \"<?xml version=\\"1.0\\" ...." Runtime.getRuntime().exec("/bin/sh", "-c", cmd);
- 使脚本可执行
- 运行它:
Runtime.getRuntime().exec("/tmp/abc.sh");
ProcessBuilder
,这样可以减少在开始时引用任何参数的需要all@MadProgrammer正如我所说的,我无法控制这件事需要在一个字符串中完成:(shell可能支持引用。您可以使用类似于bash-c'wget…”的东西……”“
。为什么不能使用ProcessBuilder?你自己调用getRuntime。是什么框架阻止了这一点?很遗憾,我必须发送不同的数据。我也不能控制exec参数,所以前两个选项不可能。似乎我只能尝试编写生成数据的脚本,而不必使用空格…谢谢!
Runtime.getRuntime().exec("/tmp/abc.sh");