2014-09-27 3 views
2

나는 UBUNTU/LINUX를 사용하고 있습니다.
나는이 응용 프로그램을 다른 플랫폼에서도 사용할 수 있어야하며 자바에서 일부 명령을 실행할 수 없습니다.
나는 여기

"자바 -version"을 실행하려고 내 코드 :Java에서 Null을 반환하는 Bash 스크립트를 실행 중

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") 등을 실행할 수 있습니다 ... 그리고 내가 DATA가
또한 내가 내부 프로그램을 실행할 수 있습니다 GET 그러나 나의 컴퓨터입니다.
.sh 파일이나 내장 java 명령을 실행할 수없는 이유는 무엇입니까? 당신의 PATH 변수 (출력 java 상위 디렉토리가

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); 
    } 

확인하는 것이 :

+0

2 가지 질문을 하나에 넣었고 2 가지 대답을했지만 아무 것도 받아 들여지지 않았습니다. -/ –

답변

4

jvm 자체가 당신은 표준 및 오류 출력을 혼합 ProcessBuilder를 사용해야합니다

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

고맙습니다. –

6

오류 스트림에 출력을 지정 System.getenv("PATH")) 바이너리의 전체 경로를 사용하십시오. 스크립트에 대한

/로 시작하는, 또는 System.getProperty("user.dir")에 (/없이) 상대 absolute 할 수 ProcessBuilder run = new ProcessBuilder("/bin/sh", "/path/to/your/script");

모든 경로처럼 /bin/sh를 사용합니다.

관련 문제