在Java中执行Bash脚本返回空值

我正在使用UBUNTU / LINUX
我试图为自己构buildswing应用程序(这个应用程序还需要其他平台),我不能在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命令并获得空白页?

jvm本身将输出指向错误流

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

您应该使用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")