Обработка пустого аргумента для CommandLine в Commons Exec - PullRequest
2 голосов
/ 31 марта 2011

Я пытаюсь выполнить скрипт bash, который принимает 3 параметра из Java, ниже приведен код, в котором я создаю командную строку

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 => File 2 & Param3 => Выходной файл

Сценарий Bash фактически вызывает и генерирует некоторые метрики для файла 1 и сохраняет его в выходном файле.При создании метрик существует 2 категории метрик, которые генерируются.

  1. Абсолют
  2. Относительный

Абсолют генерируется в файле 1, а относительный генерируется после сравнения файла 1 и файла 2. В скрипте bash Iесть условие, если Файл 2 не передан в качестве аргумента, не генерируйте относительные метрики.

Это то, что было разработано.Теперь возникают проблемы, когда отсутствует файл 2 для сравнения, и в этом случае я хочу, чтобы были сгенерированы абсолютные и относительные показатели.

Но сейчас то, что происходит со мной, - это параметр 3 (т.е.является выходным файлом) рассматривается как Файл 2 (что совершенно нежелательно), и моя относительная генерация метрик идет на бросок.

При использовании Runtime.getRuntime (). exec я смог сделать это, заключив в кавычкиЭто.ie / bin / bash Script Param1 "" Param3 работал тогда как шарм.

В моей попытке уменьшить код и получить хорошую межплатформенную поддержку я ввел commons-exec, и проблема начала появляться.

Итак, мой вопрос по-прежнему таков: как передать и очистить значение Param2 для скрипта bash с помощью commons-exec CommandLine?

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

Вы можете попробовать обработать предложение самостоятельно:

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);
2 голосов
/ 31 марта 2011

Проверка длины аргумента перед началом оценки

Вот что-то из головы:

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 
            }
        }
    }
...