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

标签 java exec apache-commons apache-commons-exec

我正在尝试执行一个 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/

相关文章:

java - 使用 MUnit 排除子流

PHP 执行 linux 命令终止得太快?

java - base 64 编码的有效字符范围

java - java中无法下载特定的URL

java - 如何让 Apache CLI 处理双破折号?

java - Elasticsearch 索引包含并以搜索开头

java - 使用高级正则表达式分割字符串

java - Android文字转语音读取html标签

c - 使用 execvp 执行我在数组中的命令

linux - 如何在 linux/unix 中找到 -exec cd