Linux上的Java Runtime.exec()参数

好的,这就是问题所在:我有3个类MyClass1和MyClass2以及ExecClass。 我转到我的命令提示符并执行此操作:

$java MyClass1 -exec "java MyClass2 arg1 arg2" 

这很完美。 现在在ExecClass中我有以下行:

 Runtime.getRuntime().exec("java MyClass1 -exec \"java MyClass2 arg1 arg2\""); 

问题是如果你打印第二个字符串与第一个字符串完全相同,但是当我的ExecClass运行它时,MyClass1抱怨:无法识别的参数arg1并失败。 经过一些调试后,我发现在第一种情况下,当我直接从终端调用时,引号中的整个字符串是1个参数(arg [1]),其中在第二种情况下,arg.length = 5和它基本上将它们分开……因为我有些未知的理由。 我只需要知道一个工作场所,如果有人知道,也就是我的Runtime.exec()工作。 PS:在我的Windows机器上,这样的问题不会仅发生在Linux上。 这是一个ubuntu destrution Kernel:2.6.32-279.14.1.el6.x86_64。

与其他语言中类似system()的函数不同, Runtime.exec不会调用shell来解析命令(双引号字符串是shell特性)。

要按照您希望的方式拆分字符串,请使用接受String数组的Runtime.exec:

 Runtime.getRuntime().exec(new String[] { "java", "MyClass1", "-exec", "java MyClass2 arg1 arg2"});