相关文章推荐
个性的小刀  ·  RuoYi-Vue-Plus 发布 ...·  1 月前    · 
耍酷的骆驼  ·  az containerapp ...·  1 月前    · 
微笑的松球  ·  批处理(bat)if ...·  1 年前    · 
精明的小马驹  ·  Visual Studio ...·  1 年前    · 
淡定的跑步鞋  ·  python messagebox ...·  1 年前    · 
我有以下代码。

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

提前感谢!

java
linux
genericStackOverflowUser
genericStackOverflowUser
发布于 2020-01-30
1 个回答
that other guy
that other guy
发布于 2020-01-30
已采纳
0 人赞同

这里是你要执行的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);

这就给出了以下参数列表。

  • /bin/sh
  • mv /home/test/update/Test-test-23afi369890Ajk/build/libs/* /home/test/test.jar
  • 为了完整起见,这里是你如何should设计的,有一个静态的命令字符串,并将参数作为单独的参数传入,以避免注入shell。

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

    谁的论证清单是。

  • /bin/sh
  • mv "$1"/build/libs/* "$2"/test.jar
  • /home/test/update/Test-test-23afi369890Ajk
  • /home/test
  • (_变成$0,即脚本的文件名,用于错误信息和类似的内容)

    在执行过程中,[我的尝试]转化为

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

    我不知道你是如何得出这个结论的。它所展开的实际论证清单是。

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