如何解决在getRuntime()。exec中使用引号?

用这个:

Runtime.getRuntime().exec(new String[] {"sh", "-l", "-c", "./foo"});

要点:不要在双引号中使用。仅在外壳中编写命令行时使用!

例如,echo "Hello, world!"(在shell中键入)被转换为:

Runtime.getRuntime().exec(new String[] {"echo", "Hello, world!"});

(请暂时忘记外壳程序通常具有的内置功能echo,而正在调用/bin/echo。:-))

解决方法

我想使用字符串作为输入来调用bash。就像是:

sh -l -c "./foo"

我想从Java做到这一点。不幸的是,当我尝试使用调用命令时getRuntime().exec,出现以下错误:

      foo": -c: line 0: unexpected EOF while looking for matching `"'

      foo": -c: line 1: syntax error: unexpected end of file

这似乎与我的字符串没有被EOF终止有关。

有没有一种方法可以将特定于平台的EOF插入Java字符串中?还是我应该寻找另一种方法,例如在调用“ sh”之前写入临时脚本?