gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:39:19 53 4
gpt4 key购买 nike

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

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""

虽然此命令可以通过命令行完美执行,但在执行 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 中进行验证):

String myCmd = "mv " + rawOutput + "/build/libs/* " + dir + "/test.jar";

以下是在 shell 中运行它的方法:

processBuilder.command("/bin/sh", "-c", myCmd);

这给出了以下参数列表:

  1. /bin/sh
  2. -c
  3. mv/home/test/update/Test-test-23afi369890Ajk/build/libs/*/home/test/test.jar

为了完整起见,您应该如何设计它,使用静态命令字符串并将参数作为单独的参数传递以避免 shell 注入(inject):

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

其参数列表是:

  1. /bin/sh
  2. -c
  3. mv "$1"/build/libs/* "$2"/test.jar
  4. _
  5. /home/test/update/Test-test-23afi369890Ajk
  6. /home/test

(_ 变为 $0,即用于错误消息等的脚本文件名)

During execution [my attempt] translates to

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

不知道你是怎么得出这个结论的。它扩展为的实际参数列表是:

  1. /bin/sh
  2. -c
  3. “mv
  4. “/home/test/update/Test-test-23afi369890Ajk/build/libs/*”
  5. “/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

关于java - 使用Java.exec()执行mv命令;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974616/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com