본문 바로가기
IT, 개발/JAVA

JAVA 명령어 실행 & 실행 후 결과 받아오기(명령어 2개 이상 사용하기)

by 개발자스터디 2022. 5. 19.
반응형

 

자바로 프로그램을 개발하다 보면 프로그램 내에서 터미널 명령어를 실행해야 할 경우도 있고, 명령어 실행 결과를 가져와서 그 값을 사용해야 하는 경우도 있습니다.

그럴 때 사용할 수 있는 소스를 알아보도록 하겠습니다.



1. 명령어만 실행

    // cmd 변수에 명령어 입력 
    String cmd = "java -jar test.jar";

    try 
    {
        new ProcessBuilder("/bin/sh", "-c", cmd).start();
    } 
    catch (IOException e) 
    {
    }

 

문자열로 명령어를 입력하여 실행할 때 두 개 이상의 명령어를 사용하고 싶다면 구분자로 나눠서 입력합니다.

다중 명령어를 간단하게 살펴보겠습니다.

1) ;

String cmd = "java -jar test1.jar;java -jar test2.jar;java -jar test3.jar"

순차적으로 명령어를 실행하고 성공/실패 여부와 상관없이 모든 명령어를 실행합니다.

2) &&

String cmd = "java -jar test1.jar&&java -jar test2.jar&&java -jar test3.jar"

순차적으로 명령어를 실행하면서 실패하는 경우 발생 시 그 뒤의 모든 내용은 실행하지 않습니다. 

앞에 명령어가 성공해야만 그 뒤 명령어를 실행합니다.

3) ||

String cmd = "java -jar test1.jar||java -jar test2.jar||java -jar test3.jar"

순차적으로 명령어를 실행하면서 성공하는 경우 발생 시 그 뒤의 모든 내용은 실행하지 않습니다.

앞의 명령어가 실패해야 그 뒤 명령어를 실행합니다. 하나만 성공하면 끝나는 것입니다.


 

2. 명령어 실행하고 결과값 받기 

    // cmd 변수에 명령어 입력 
    String cmd = "ps -ef | grep java";
    String[] command = {"/bin/sh","-c",cmd};

    try 
    {
        Process process = Runtime.getRuntime().exec(command);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null;
        StringBuffer sb = new StringBuffer();
       
        while ((line = reader.readLine()) != null) 
        {
            sb.append(line);
        }
     } 
    catch (Exception e) 
    {     
    
    }

 

StringBuffer에 결과를 담아서 그 값을 사용하면 됩니다.

 

받는 결과가 하나라면 String으로 바로 사용하지만 

여러 내용을 받아서 사용하고자 한다면 List나 배열을 사용하는 것도 좋은 방법입니다.

 

readLine 하는 곳에서 자신의 사용 용도에 맞게 수정하면서 사용해보시기 바랍니다.

 

 

 

728x90
반응형