簡體   English   中英

如何在 Java 中執行 shell 腳本

[英]How to execute a shell script in Java

我必須在 Linux 機器中從 Java 運行 shell 腳本,例如,下面是腳本路徑和腳本所需的所有參數。

"ksh /xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh param1 param2 20200901 459 121"

下面是代碼,

String script = "ksh /xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh param1 param2 20200901 459 121";
ProcessBuilder processBuilder = new ProcessBuilder();                       
processBuilder.command(script);
processBuilder.redirectErrorStream(true);
//start() will be in try catch
process = processBuilder.start();

int exitVal = process.waitFor();

if(exitVal == 0){
   //code
}

我是否需要通過將每個腳本作為單獨的字符串添加到列表中來將腳本作為列表傳遞? "ksh", "/xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh", "param1" "param2" "20200901" "459" "121"

在我的 Windows 機器上,我正在打開一個記事本,如下所示,它工作正常,

ProcessBuilder processBuilder = new ProcessBuilder("Notepad.exe", "C:/Dev/Test.txt");
processBuilder.redirectErrorStream(true);
process = processBuilder.start();

腳本會在 Linux 機器上正確執行還是需要對代碼進行更多更改?

應該能夠使用Runtime.exec()ProcessBuilder來調用 shell 來運行腳本,但是整個過程充滿了陷阱。

我建議閱讀這篇文章:

https://www.infoworld.com/article/2071275/when-runtime-exec---won-t.html

這解釋了其中的許多陷阱,以及如何避免它們。 特別是,在 Linux 上,您幾乎肯定需要從 shell 調用中使用 stdout 和 stderr —— 即使腳本不產生任何輸出,有時也是如此。 您還需要小心處理腳本參數中的空格和特殊字符(如果有的話)。 Java 用於命令行的解析器盲目地在空格處中斷命令行。

看看這個 Runtime.getRunTime().exec

暫無
暫無

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

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