2013-08-14 1 views
3

Я пытаюсь выполнить сценарий оболочки с аргументами командной строки с помощью ProcessBuilder, этот сценарий оболочки inturn вызывает два других сценария оболочки, которые используют этот аргумент. Первый сценарий оболочки работает нормально, но при запуске второй один возвращает код выхода 1.Не удается запустить сценарий оболочки с аргументами с помощью Java ProcessBuilder

ProcessBuilder фрагмент из программы Java:

//scenario - A string that holds a numerical value like 1 or 2 etc 
String[] command2 = {"/bin/bash", "<path to shell script>/runTemporaryTestSuite.sh", scenario}; 
ProcessBuilder pb2 = new ProcessBuilder(command2); 
Process p2 = pb2.start(); 
BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream())); 
String line; 
//print - is an object ref of response.getWriter() // 
print.println("Output of running "+Arrays.toString(command2)+" is: "); 
while ((line = br.readLine()) != null) { 
    print.println(line); 
} 

try { 
    int exitValue = p2.waitFor(); 
    print.println("<br><br>Exit Value of p2 is " + exitValue); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

runTemporaryTestSuite.sh

#!/bin/bash 
sh <path to script>/clearRegressionResult.sh (This runs fine) 
sh <path to script>/startRegression.sh $1 (This is where the issue occurs) 

startRegression.sh выглядит следующим образом:

SUITE_PATH="./" 
java -DconfigPath=${SUITE_PATH}/config.xml -Dscenario=$1 -Dauto=true -jar test.jar 

Мой выход: Вывод [/ bin/bash, /runTemporaryTestSuite.sh, 29]: Значение выхода p2 равно 1

Любая помощь в разрешении этого действительно ценится.

ответ

6

В думаю, что проблема заключается не в том, что вы не можете запустить скрипт с аргументами, мне было интересно, и я сделала тест

public class Main { 

public static void main(String[] args) throws IOException { 
    String[] command = {"/bin/bash", "test.sh", "Argument1"}; 
    ProcessBuilder p = new ProcessBuilder(command); 
    Process p2 = p.start(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream())); 
    String line; 

    System.out.println("Output of running " + command + " is: "); 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
} 

здесь скрипту test.sh

echo Hello im the script, here your args [email protected] 

Здесь выход

Output of running [Ljava.lang.String;@604e9f7f is: 
Hello im the script, here your args Argument1 

то, что я думаю, что это просто, что ваш startRegression.sh выход с не-0 статусом (иначе это метрономы ILED где-то), и есть отзвук, runTemporaryTestSuite.sh также выход с ненулевым статусом, и так далее, следовательно, сообщение: Выход Значение р2 1

То, что я вижу сейчас,

SUITE_PATH = "./" java -DconfigPath = $ {SUITE_PATH} /config.xml [..] configPath будет .//config.xml, возможно, у вас есть простой файл, не найденный проблемой? Возможно, я ошибаюсь, надеюсь, что это помогло