gpt4 book ai didi

java - 在 Commons Exec 中处理 CommandLine 的空参数

转载 作者:行者123 更新时间:2023-11-30 05:57:31 25 4
gpt4 key购买 nike

我正在尝试执行一个 bash 脚本,该脚本从 Java 获取 3 个参数,以下是我创建命令行的代码

CommandLine command = new CommandLine(/bin/bash);
command.addArgument(ScriptName);
command.addArgument(Param1);
command.addArgument(Param2);
command.addArgument(Param3);

当我传递非空参数时,这就像一个魅力。但由于参数之一为空(即“”)而无法正常工作

详细说明一下,在某些情况下 Param2 = ""。现在,当执行 bash 脚本时,不再考虑 Param2 = "",而是采用 Param2 = Param 3(值)且 Param3 = undefined。

如何阻止这种情况发生?

编辑:Param1、Param2 和 Param3 实际上是传递给 bash 脚本的文件名。其中,Param1 => 文件 1,Param2 => 文件 2 & Param3 => 输出文件

Bash 脚本实际上是在文件 1 上调用并生成一些指标并将其存储在输出文件。生成指标时,会生成 2 类指标。

  1. 绝对
  2. 亲戚

绝对值在文件 1 上生成,而相对值在比较文件 1 和文件 2 后生成。在 bash 脚本中,我有一个条件,如果文件 2 没有作为参数传入,则不生成相对指标。

这就是设计的样子。现在,当没有文件 2 进行比较时,就会出现问题,在这种情况下,我希望生成绝对指标并忽略相对指标。

但现在发生在我身上的是 Param 3(即输出文件)被视为文件 2(这是完全不希望的),并且我的相对指标生成发生了折腾。

当使用 Runtime.getRuntime().exec 时,我可以通过引用它来做到这一点。即/bin/bash Script Param1 ""Param3 这就像一个魅力。

为了减少代码并获得良好的跨平台支持,我引入了 commons-exec,然后问题开始出现。

所以,我的问题仍然是,如何使用 commons-exec CommandLine 将 Param2 的空值传递给 bash 脚本?

最佳答案

您可以尝试自己处理报价:

if (Param.isEmpty()) {
command.addArgument("\"\"", false);
} else {
command.addArgument(Param2);
}

或者只是:

command.addArgument("\"" + Param2 + "\"", false);

我从未使用过它,但正在学习 [:-)

更新:这对我有用(萨尔曼):

CommandLine command = new CommandLine(/bin/bash);
command.addArgument(ScriptName);
command.addArgument(Param1);

if (Param2== null || Param2.trim().length() == 0) {
command.addArgument("\"\"", false);
} else {
command.addArgument(Param2);
}

command.addArgument(Param3);

关于java - 在 Commons Exec 中处理 CommandLine 的空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498250/

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