使用Java.exec()执行mv命令;

使用Java.exec()执行mv命令;,java,linux,Java,Linux,我正在尝试通过LinuxMV命令移动文件。 我有以下代码: processBuilder.command("/bin/sh", "-c", "\"mv", "\"" + rawOutput + "/" + dir + "/build/libs/*\"", "\"" + startDir + "/test.jar\"\""); 在执行过程中,它转换为 /bin/sh -c "mv "/home/test/update/Test-test-23afi369890Ajk/buil

我正在尝试通过LinuxMV命令移动文件。 我有以下代码:

processBuilder.command("/bin/sh", "-c", "\"mv", "\"" + rawOutput + "/" + dir + "/build/libs/*\"", "\"" + startDir + "/test.jar\"\"");
在执行过程中,它转换为

/bin/sh -c "mv "/home/test/update/Test-test-23afi369890Ajk/build/libs/*" "/home/test/test.jar""
/bin/sh-c“mv”/home/test/update/test-test-23afi369890Ajk/build/libs/*“”/home/test/test.jar“

虽然此命令通过命令行完美执行,但在jar执行期间失败。 给出了以下错误:

"/home/test/update/Test-test-23afi369890Ajk/build/libs/*": 1: "/home/test/update/Test-test-23afi369890Ajk/build/libs/*": Syntax error: Unterminated quoted string

提前谢谢

下面是要执行的shell命令:

mv /home/test/update/Test-test-23afi369890Ajk/build/libs/* /home/test/test.jar
下面是用Java构建这个shell命令的Java连接(您应该打印并复制粘贴到shell以验证它):

以下是如何在shell中运行它:

processBuilder.command("/bin/sh", "-c", myCmd);
这将给出以下参数列表:

  • /bin/sh
  • -c
  • mv/home/test/update/test-test-23afi369890Ajk/build/libs/*/home/test/test.jar
  • 为了完整起见,这里是您应该如何设计它的,使用静态命令字符串并将参数作为单独的参数传递,以避免shell注入:

    String myCmd = "mv \"$1\"/build/libs/* \"$2\"/test.jar";
    processBuilder.command("/bin/sh", "-c", myCmd, "_", rawOutput, dir);
    
    其参数列表为:

  • /bin/sh
  • -c
  • mv“$1”/build/libs/*“$2”/test.jar
  • /home/test/update/test-test-23afi369890Ajk
  • /home/test
  • \uuu
    变为
    $0
    ,即用于错误消息和类似信息的脚本文件名)

    在执行期间[我的尝试]转换为

    /bin/sh -c "mv "/home/test/update/Test-test-23afi369890Ajk/build/libs/*" "/home/test/test.jar""
    
    我不知道你是怎么得出这个结论的。它扩展到的实际参数列表是:

  • /bin/sh
  • -c
  • “mv
  • “/home/test/update/test-test-23afi369890Ajk/build/libs/*”
  • “/home/test/test.jar”“
  • 这对应于以下shell命令,该命令可能会失败,并显示与Java程序相同的错误消息(如果您没有抑制stderr):

    $ /bin/sh -c '"mv' '"/home/test/update/Test-test-23afi369890Ajk/build/libs/*"' '"/home/test/test.jar""'
    "/home/test/update/Test-test-23afi369890Ajk/build/libs/*": 1: Syntax error: Unterminated quoted string