java로 shell 명령어 실행하기, pipeline
2020-05-29 작성
java로 shell 명령어를 실행하는 방법은 2가지가 있다.
ProcessBuilder와 runtime.exec()를 사용하면 된다.
다음은 ProcessBuilder 예제이다. ProcessBuilder에 들어가는 명령어는 String[] 또는 List<String>여야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ProcessBuilderExample {
public static void main(String[] args) {
try {
String[] command = new String[] {"bash","-c", "hdfs dfs -df | tail -n 1"};
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("\nExited with error code : " + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
다음은 runtime.exec() 예제이다. 위와 코드 내용은 2줄 빼고 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RuntimeExecExample {
public static void main(String[] args) {
try {
String[] command = new String[] {"bash","-c", "hdfs dfs -df | tail -n 1"};
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("\nExited with error code : " + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
명령어에 pipeline이 들어있을 때 실행이 안돼서 많이 헤멨는데,
위의 예제 처럼, shell(sh, bash)명령어 뒤에 pipeline이 있는 명령어를 한번에 써주니, 명령이 잘 실행됐다.
String[] cmd = {
"/bin/sh",
"-c",
"ls /etc | grep release"
};
참고사이트:
https://d2.naver.com/helloworld/1113548
https://mkyong.com/java/java-processbuilder-examples/
https://mkyong.com/java/how-to-execute-shell-command-from-java/
http://zetcode.com/java/processbuilder/
https://stackoverflow.com/questions/5928225/how-to-make-pipes-work-with-runtime-exec
'IT기술 > java, spring' 카테고리의 다른 글
java spring ip가 특정 ip 대역(cidr)에 속하는 지 확인하기 ip restrict (0) | 2021.01.16 |
---|