2011-10-19 6 views
5

Java 프로그램의 명령 줄에서 일부 명령을 실행하고 있는데 "grep"을 사용할 수없는 것으로 보입니까? 나는 "grep"부분을 없애고 명령을 실행 해 보았습니다. 작동하지 않는자바 런타임 프로세스가 "Grep"하지 않습니다

내 코드 : 않습니다

String serviceL = "someService"; 
Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec("chkconfig --list | grep " + serviceL); 

코드 작업 : 왜이 ​​

Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec("chkconfig --list"); 

입니까? 그리고 거기에 올바른 방법이나 해결 방법이 있습니까? 나는 전체 출력을 구문 분석 할 수 있다는 것을 알고 있지만 명령 줄에서 모든 것을 쉽게 수행 할 수 있습니다. 감사.

답변

6

쉘의 기능인 파이핑을 사용하려고합니다 ... 쉘을 사용하지 않고 있습니다. 당신은 chkconfig 프로세스를 직접 exec'ing하고 있습니다.

쉬운 해결책은 쉘을 간부 인하는 것입니다 그리고 그것은 모든 것을 할 수있다 :

말했다되고 그건
Process proc = rt.exec("/bin/sh -c chkconfig --list | grep " + serviceL); 

... 왜 grep을하는 배관됩니다? chkconfig의 출력을 읽고 java에서 자신을 일치 시키십시오.

+0

Java에서 일치하지 않는 이유는 없습니다. 출력을 파싱하는 것보다 grep을 작성하는 것이 더 빠를 것이라고 생각했습니다. 나는 grep이 쉘의 기능 이었음을 알지 못했기 때문에 나는 상대적으로 리눅스에 익숙하지 않다. 감사! – Max

+3

@Max : grep은 쉘 내장이 아니며, 파이프'|'는 쉘 구문 기능입니다. – ninjalj

8

파이프 (리디렉션 또는 >)는 쉘의 함수이므로 Java에서 직접 실행하면 작동하지 않습니다. (따옴표)를 -c 후 지정 (파이프 포함) 명령 행에서 쉘 프로세스를 실행

/bin/sh -c "your | piped | commands | here" 

: 당신은 같은 것을 할 필요가있다.

내 Linux OS에서 작동하는 샘플 코드는 다음과 같습니다.

여기서 모든 'Skype'프로세스를 추출하고 프로세스 입력 스트림의 내용을 인쇄합니다.

+0

아름다운 솔루션 !!! –

0

문자열 [] 명령 = { "bash", "-c", "chkconfig --list | grep"+ serviceL}; 프로세스 p = Runtime.getRuntime(). exec (명령);

또는 Linux env에있는 경우 grep4j를 사용하십시오.

관련 문제