본문 바로가기
IT/JAVA

Java ProcessBuilder cd 로 이동

by 최고영회 2021. 7. 23.
728x90
반응형
SMALL

Java 에서 특정 shell script 를 실행해야 할 일이 생겨 ProcessBuilder 를 이용했다. 

ProcessBuilder pb = new ProcessBuilder("/bin/sh", command);
try {
  pb.redirectErrorStream(true);
  Process proc = pb.start();
  try (BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()))){
    String line = null;
	while ((line = br.readLine()) != null) {
	  rtnStr = line;
	  log.debug("shell script return data: {}", rtnStr);
	}
  }
} catch (Exception e) {
  log.error("Error execute command : {}, \nException ", command, e);
}

아무 이상 잘 수행될 것 같으나 

shell script 내용을 살펴 보니 상대경로로 (현재 경로에서 파일을 찾는 ./etc/abc.war) 수행되는 구절이 있었다. 

이 때문에 shell script 실행 시 오류가 발생한다. 

물론 Java Process 가 해당 shell script 의 위치와 동일한 곳에 있다면 문제되지 않겠지만 그렇지 않기 때문에 

해당 경로로 이동한 후에 shell script 를 실행시켜줘야 문제가 되지 않는다. 

 

ProcessBuilder 에서는 이를 해결하기 위해 directory() 라는 메서드를 제공하고 있다. 

위 코드에서 directory 메서드만 추가 해 주면 해결된다. 

ProcessBuilder pb = new ProcessBuilder("/bin/sh", command);
pb.directory(new File(path)); // <---- 이렇게 shell script 의 경로를 넣어준다. 
try {
  pb.redirectErrorStream(true);
  ...
  ...

 

728x90
반응형
LIST