java run.exec和shell执行之间有什么区别吗?

时间:2009-11-14 07:29:31

标签: java linux shell command pdf2swf

我有一个调用shell命令的程序。当我使用java的run.exec执行命令时,它不起作用但是当我直接在终端中执行命令时,它就像魅力一样。

ex: pdf2swf "3bbba47.pdf" -T 9 -o "3bbba47.swf" didnt worked
    from java program but worked directly executing it in terminal.

但是当我尝试从命令中删除引号时

pdf2swf 3bbba47.pdf -T 9 -o 3bbba47.swf

它在run.exec和终端都运行良好。

为什么会这样?

我在mac和ubuntu中都尝试过,并以相同的结果结束。

3 个答案:

答案 0 :(得分:2)

run.exec()不会调用shell。 shell解析命令行并在将它们作为参数传递给pdf2swf之前有效地删除引号。您只能使用run.exec()运行“原始”命令。

如果需要,您可以使用run.exec()运行 shell ,并将其作为shell命令解析。引用会有点痛苦,但可行。

答案 1 :(得分:1)

当你在shell中时,在shell将它提供给JVM之前解释引号字符。

当你在run.exec时,引号被认为是命令的一部分,所以JVM认为你要求[“3bbba47.pdf”]而不是[3bbba47.pdf]

答案 2 :(得分:0)

来自:http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1

  

Runtime.exec()不是命令行

     

最后一个陷阱   Runtime.exec()错误地假设   exec()接受任何String   您的命令行(或shell)接受。   Runtime.exec()更受限制   而不是跨平台。这个陷阱   是由试图使用的用户引起的   exec()方法接受单个   字符串作为命令行会。该   混淆可能是由于这一事实   command是的参数名称   exec()方法。因此,程序员   错误地关联参数   用他或她的任何东西命令   可以在命令行上键入,而不是   将它与单个程序相关联   及其论点。