簡體   English   中英

Java ProcessBuilder 傳遞參數

[英]Java ProcessBuilder Passing parameters

我有一個帶有一個參數的 shell 腳本,如下所示:

測試文件

#!/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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM