问题描述
我正在尝试执行一个从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 =未定义。
如何阻止这种情况的发生?
编辑:Param1,Param2和Param3实际上是传递到bash脚本的文件名。 其中,Param1 => File1,Param2 => File 2&Param3 =>输出文件
Bash脚本实际上是在文件1上调用并生成一些度量标准,并将其存储在输出文件中。 生成指标时,将生成2类指标。
- 绝对
- 相对的
绝对是在文件1上生成的,而相对文件是在比较文件1和文件2之后生成的。在bash脚本中,如果文件2没有作为参数传入,则我有条件,不要生成相对度量。
这就是设计。 现在,当不存在要比较的文件2时出现问题,在这种情况下,我希望生成绝对度量,而忽略相对度量。
但是,现在发生的事情是参数3(即输出文件)被认为是文件2(这是完全不希望的),而我的相对度量标准是折腾的。
当使用Runtime.getRuntime()。exec时,我可以通过引用它来做到这一点。 即/ bin / bash脚本Param1“” Param3当时就像一个魅力。
为了减少代码并获得良好的跨平台支持,我引入了commons-exec,问题开始出现。
因此,我的问题仍然是,如何使用commons-exec CommandLine将Param2的值传递并清空bash脚本?
1楼
您可以尝试自己处理报价:
if (Param.isEmpty()) {
command.addArgument("\"\"", false);
} else {
command.addArgument(Param2);
}
要不就:
command.addArgument("\"" + Param2 + "\"", false);
我没用过,但是学习 [:-)
更新:这是对我有用的(Salman):
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);
2楼
开始评估之前检查参数长度
这是我脑海中的东西:
public static void main(String[] args) {
if (args.length != 3) {
//print usage message throw exception or whatever System.exit afterwards
}
//individual agrument evaluation
for (int i = 0; i < args.length; i++) {
//if length less then one, or whatever you prefer
if(args[i].length() < 1){
//print usage message
//throw exception exit the program
}
}
}