2017-11-27 1 views
-3

Java 코드를 통해 다음 명령을 실행하고 싶습니다. 아무도 내가 어떻게 그것을 실행할 수 제안 할 수 있습니까?Java 코드를 통해 명령을 실행하는 방법

find ./path/ | grep "키워드"| grep -rnw -e "keyword"

나는 여러 방면에서 노력하고 있지만 적절한 출력을 얻지 못하고 있습니다.

+1

우리는 그래서 우리는 그것을 잘못 무엇을 말할 수 없다 코드를 볼 수 없습니다. 이 예를 그물에서 발견하는 것이 어렵지 않아야합니다. – tripleee

+0

여러분은 다른 질문의 사본이라고 말하지만 단 하나의 사본 만 지정하십시오. 사실 제가 말하고자하는 몇 가지 다른 질문의 조합입니다. 특히 여기에 표시된 원래 질문은 전혀 파이프에 대해 이야기하지 않습니다 ... 당신은 내 의견으로 중복으로 표시하기에는 너무 빠르다. –

답변

0

Runtime.getRuntime().exec() 여기에 친구가 있습니다. How to make pipes work with Runtime.exec()?

인쇄 응답이 더 나은 여기에 덮여에서 : 당신을 통해 파이프를 실행하려는처럼 java runtime.getruntime() getting output from executing a command line program

것 같다

녀석은 약간 다른 질문의 중복하지만 대부분이 하나 인 것을 옳다 자바 코드. 나는 쉘이나 bash를 사용하는 것이 가장 쉽다는 것을 발견했다. 가능한 경우 org.apache.commons.exec 패키지를 탐색 할 수도 있습니다. 여기

내가 어떻게 할 것입니다 :

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Test { 

    public static void main(String argv[]) { 
     try { 
      String[] cmd = { 
        "/bin/sh", 
        "-c", 
        "find ./path/ | grep \"keyword\" | grep -rnw -e \"keyword\"" 
      }; 

      Process exec = Runtime.getRuntime().exec(cmd); 

      BufferedReader stdInput = new BufferedReader(new InputStreamReader(exec.getInputStream())); 
      BufferedReader stdError = new BufferedReader(new InputStreamReader(exec.getErrorStream())); 

      System.out.println("Standard output:\n"); 
      String s; 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      System.out.println("Error output:\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

안녕하세요 Gralak, 귀중한 답변을 주셔서 감사합니다 !! 나는 또 다른 의심을 품는다. grep "somekey ="value ""/ path/fileName을 원했습니다. 명령 창에서/(grep "somekey = \"value \ ""/ path/fileName)을 사용하여 결과를 얻었습니다. 하지만 Java에서는 작동하지 않습니다. 해결책이 있습니까? –

관련 문제