簡體   English   中英

執行Bash腳本在Java中返回Null

[英]Executing Bash Script Returns Null In Java

我正在使用UBUNTU / LINUX
我正在嘗試為自己構建swing應用程序(此應用程序也需要在其他平台上工作)並且我無法在java上執行某些命令。
我試圖執行“java -version”

這是我的代碼:

 Runtime run = Runtime.getRuntime();

    Process p = run.exec("java -version");

    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {

        for (String output = br.readLine(); output != null; output = br.readLine()) {
            System.out.println(output);
        }

    } catch (IOException e) {
        System.out.println(e);
    }


它返回空白頁面無輸出!


但是我可以執行run.exec(“ls”)/或(“gedit”)等等......然后我獲取數據
我也可以在我的電腦上執行內部程序。
為什么我不能執行.sh文件或內置java命令並獲取空白頁?

您應該使用ProcessBuilder來混合標准輸出和錯誤輸出:

    ProcessBuilder run = new ProcessBuilder("java", "-version");
    run.redirectErrorStream(true);

    Process p = run.start();

    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {

        for (String output = br.readLine(); output != null; output = br.readLine()) {
            System.out.println(output);
        }

    } catch (IOException e) {
        System.out.println(e);
    }

檢查java父目錄是否在PATH變量中(輸出System.getenv("PATH") )或使用二進制文件的完整路徑。

對於腳本,使用/bin/sh就像ProcessBuilder run = new ProcessBuilder("/bin/sh", "/path/to/your/script");

所有路徑可以是absolute開始/或相對的(無/ )到System.getProperty("user.dir")

jvm本身將輸出定向到錯誤流

try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {

暫無
暫無

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

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