我正在尝试执行一个 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 上生成,而相对值在比较文件 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/