2017-11-14 24 views
0

이 질문은 Set environment variable in shell script/access in Java program의 후속 조치입니다. 나는 쉘 스크립트를 실행 한 후 자바 환경 변수를 가져 오기 위해 노력하고 있지만 수없는 너무쉘 스크립트에서 환경 변수를 설정하고 Java 프로그램에서 액세스합니다.

쉘 스크립트를 수행합니다 getDetails.sh :

#!/bin/bash 
# File: getDetails.sh 
export userDetails="USER123" 
# echo "User Details for App :$userDetails" 

자바 방법 :

String details = new String("source " + "getDetails.sh"); 
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", details); 
Process getPwdProc = processBuilder.start(); 
System.out.println("Details - " + processBuilder.environment().get("userDetails")); 

자바 메소드는 환경 변수 userDetails에 대해 null을 반환하거나 인쇄합니다.

P. - UserDetails를 읽는 데 InputStream/BufferedReader를 사용하는 것은 프로그램/조직에 세부 정보가 반향되지 않으므로 여기에서는 불가능합니다.

답변

3

bash 프로세스에서 환경 변수를 내 보내면 "전역"이되지 않으므로 하위 프로세스에 상속 (복사)됩니다. 즉, 프로세스를 내 보낸 bash 프로세스가 실행하는 프로세스입니다.

여기에서 Java는 부모이며, 자식으로부터 부모 프로세스로 변수를 삽입하는 (합법적 인) 방법은 없습니다. Java 실행 전에 변수를 설정하고 내 보내야합니다.

먼저 변수를 내 보낸 다음 Java 응용 프로그램을 실행하는 "래퍼"bash 스크립트를 제안합니다.

+1

감사합니다. @cdarke, 귀하의 의견은 실제로 도움이됩니다. 자바를 호출하는 부모 bash에서 변수를 내 보냈습니다. 내보내기 스크립트가 이제 부모이고 java가 자식 프로세스입니다. 이 변경으로 Java 코드에서 환경 변수를 사용할 수 있습니다. – user3315307