Java ProcessBuilder 传递参数

标签 java shell processbuilder

我有一个带有一个参数的 shell 脚本,如下所示:

测试.sh

#!/bin/bash
echo "Shell Demo";
echo "Hello $0";

现在我想使用 ProgressBuilder 执行此脚本并传递参数。 java代码如下:

 public void testShell() throws Exception {
        String shPath = "./test.sh";
        // want to pass a value "Jack" to shell script
        ProcessBuilder builder = new ProcessBuilder(shPath, "Jack");
        Process result = builder.start();
        result.waitFor();
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(result.getInputStream()));
        String output;
        while ((output = stdInput.readLine()) != null) {
            System.out.println(output);
        }
    }

输出:

Shell Demo
Hello ./test.sh

我想要的输出是:

Shell Demo
Hello Jack

最佳答案

您需要删除该 result.waitFor 并指定要使用的执行程序,即 bash (您也可以使用 sh),除了您在右侧之外路径。

public String[] createExecutionString(String process, String...params) {
    final List<String> executor = new ArrayList<>();
    executor.add("bash"); /* cmd on windows */
    executor.add("-c"); /* /c on windows */
    executor.add(process);
    for (String param : params) {
        executor.add(param);
    }
    return executor.toArray(new String[0]);
}

public void testShell() throws Exception {
    String shPath = "./test.sh";
    // want to pass a value "Jack" to shell script
    ProcessBuilder builder = new ProcessBuilder(createExecutionString(shPath, "Jack"));
    Process result = builder.start();
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(result.getInputStream()));
    String output;
    while ((output = stdInput.readLine()) != null) {
        System.out.println(output);
    }
}

关于Java ProcessBuilder 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968655/

相关文章:

Java/Python 使用 processBuilder

java - 分割字符串,并得到某个单词

java - 使用 JMXProxyServlet 在 Java 程序中监控 Tomcat

java - 如何在 javafx 中隐藏组合框上的向下箭头按钮?

bash - sudo cat << EOF > 文件不起作用,sudo su 可以

java - 从java代码执行命令

java - 如何用 Java 调用 ffmpeg - 变音符号?

java - 通过数据库进行进程间通信

bash - 检查 S3 文件是否已被修改

linux - 协议(protocol) 2 主机 key 算法错误 '+ssh-dss'