命令的java run.exec与shell执行之间有什么区别吗?

命令的java run.exec与shell执行之间有什么区别吗?,java,linux,shell,command,pdf2swf,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 3bbba4

我有一个调用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和terminal中都运行良好

为什么会这样

我在mac和ubuntu上都试过,结果都一样。

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

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

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


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

当您在shell中时,在shell将引号字符提供给JVM之前会对其进行解释


当您在run.exec中时,引号被视为命令的一部分,因此JVM认为当您在shell中时,您请求的是[“3bbba47.pdf”],而不是[3bbba47.pdf]

,引号字符在shell将其提供给JVM之前被解释

当您在run.exec中时,引号被视为命令的一部分,因此JVM认为您请求的是[“3bbba47.pdf”],而不是[3bbba47.pdf]

来自:

Runtime.exec()不是命令行

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

发件人:

Runtime.exec()不是命令行

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