gpt4 book ai didi

java - 命令行中的引号

转载 作者:行者123 更新时间:2023-11-29 03:38:29 25 4
gpt4 key购买 nike

我正在尝试为 LFTP 制作一个 Maven 插件,这涉及从我的 Java 应用程序调用 LFTP 命令行程序。

但是我无法让它使用单引号、双引号、转义单引号/双引号来处理我传入的命令。

到目前为止,我的代码是:

final String command = "lftp -e 'set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye' -u username,password -p 21 192.168.1.100"
final CommandLine cmdLine = CommandLine.parse(command.toString());
final DefaultExecutor executor = new DefaultExecutor();
executor.setWorkingDirectory(new File(baseDir));
final int result = executor.execute(cmdLine);

以及寻找有关下一步尝试的建议。

编辑 #1: 我试图利用 org.apache.commons.exec.CommandLine 并作为预完成的字符串,但它会导致以下错误:

Unknown command `set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye'.
Exception in thread "main" org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
at org.welsh.build.automation.lftp.plugin.TestClass.main(TestClass.java:30)

但是当我打印出生成的命令并手动运行它时,它工作正常。

编辑#2:增加了一些清晰度。

最佳答案

Commons-exec 强调通过增量构建更容易处理 CommandLine 实例:

final CommandLine cmdLine = new CommandLine("lftp");
cmdLine.addArgument("-e");
cmdLine.addArgument("set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye");
...
executor.execute(cmdLine);

我没有看过他们的命令行解析器,但如果他们不完全信任它,我也不会。

关于java - 命令行中的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241592/

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