在Commons Exec中处理CommandLine的空参数

时间:2011-03-31 10:15:35

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

我正在尝试执行一个从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上调用并生成一些指标并将其存储在其中 输出文件。生成指标时,会生成两类指标。

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

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

    但是现在我发生的事情是Param 3(即输出文件)被认为是文件2(这是完全不受欢迎的),而我的相对指标生成则需要折腾。

    使用Runtime.getRuntime()。exec我能够通过引用它来做到这一点。即/ bin / bash Script Param1“”Param3就像魅力一样。

    在我尝试减少代码并获得良好的跨平台支持时,我引入了commons-exec并且问题开始出现。

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

2 个答案:

答案 0 :(得分:4)

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

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);

答案 1 :(得分: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 
            }
        }
    }