我正在尝试执行一个从 Java 获取 3 个参数的 bash 脚本,以下是我创建命令行的代码
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 => File1,Param2 => 文件 2 & Param3 => 输出文件
Bash 脚本实际上是在文件 1 上调用并生成一些指标并将其存储在输出文件中。生成指标时,会生成 2 类指标。
- 绝对
- 相对的
绝对值是在文件 1 上生成的,而相对值是在比较文件 1 和文件 2 之后生成的。在 bash 脚本中,如果文件 2 没有作为参数传入,则我有条件,不要生成相对指标。
这就是设计。现在,当没有文件 2 进行比较时,问题就出现了,在这种情况下,我希望生成绝对指标,而忽略相对指标。
但是现在发生在我身上的是参数 3(即输出文件)被认为是文件 2(这完全是不受欢迎的),而我的相对指标生成需要折腾。
使用 Runtime.getRuntime().exec 时,我可以通过引用它来做到这一点。即 /bin/bash Script Param1 "" Param3 这就像一个魅力。
在我尝试减少代码并获得良好的跨平台支持时,我引入了 commons-exec 并且问题开始出现。
所以,我的问题仍然是,如何使用 commons-exec 命令行将 Param2 的值传递和空值到 bash 脚本?