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