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");