无法使用 Java ProcessBuilder 启动带参数的 shell 脚本 [英] Cannot launch shell script with arguments using Java ProcessBuilder

查看:92
本文介绍了无法使用 Java ProcessBuilder 启动带参数的 shell 脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to execute a shell script with command line arguments using ProcessBuilder, this shell script inturn calls two other shell scripts that uses this argument. The first shell script runs fine, but when the second one is started it returns exit code 1.

Java 程序中的 ProcessBuilder 片段:

ProcessBuilder snippet from Java Program:

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

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 看起来像:

startRegression.sh looks like:

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

我的输出:运行 [/bin/bash,/runTemporaryTestSuite.sh, 29] 的输出是:p2 的退出值为 1

My output: Output of running [/bin/bash, /runTemporaryTestSuite.sh, 29] is: Exit Value of p2 is 1

非常感谢您对解决此问题的任何帮助.

Any help in resolving this is really appreciated.

推荐答案

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

In think the problem is not that you cannot launch shell script with arguments, I was curious and I did a test

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 脚本

here is the test.sh script

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

What I think is just that your startRegression.sh exit with a non-0 status (aka it failed somewhere) and it have repercussion, runTemporaryTestSuite.sh will also exit with a non-zero status, and so on hence the message : Exit Value of p2 is 1

我现在看到的,

SUITE_PATH="./"java -DconfigPath=${SUITE_PATH}/config.xml [..] configPath 将是 .//config.xml 所以也许你有一个未找到的纯文件问题?我可能错了,希望对您有帮助

SUITE_PATH="./" java -DconfigPath=${SUITE_PATH}/config.xml [..] the configPath will be .//config.xml so maybe you have a plain file not found issue? I might be wrong, hope it helped

这篇关于无法使用 Java ProcessBuilder 启动带参数的 shell 脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆