[英]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.