系统相关
首页 > 系统相关> > 无法使用Java ProcessBuilder启动带有参数的shell脚本

无法使用Java ProcessBuilder启动带有参数的shell脚本

作者:互联网

我正在尝试使用ProcessBuilder执行带有命令行参数的shell脚本,此shell脚本调用另外两个使用此参数的shell脚本.第一个shell脚本运行正常,但是当第二个脚本启动时,它返回退出代码1.

Java程序的ProcessBuilder片段:

//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

任何解决这个问题的帮助都非常感谢.

解决方法:

认为问题不是你不能用参数启动shell脚本,我很好奇,我做了一个测试

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 $@

这里输出

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

我认为只是你的startRegression.sh退出非0状态(也就是它在某处失败)并且它有反响,runTemporaryTestSuite.sh也将以非零状态退出,依此类推,因此消息:退出值p2是1

我现在看到的,

SUITE_PATH = “./”
java -DconfigPath = ${SUITE_PATH} /config.xml [..] configPath将是.//config.xml所以也许你找不到普通文件?我可能错了,希望它有所帮助

标签:processbuilder,java,shell,exit-code
来源: https://codeday.me/bug/20190825/1720112.html