2013-05-24 1 views
0
Process proc1 ='sh -c ps -ef'.execute(); 
Process proc2 ='sh -c grep sleep.sh '.execute(); 
Process proc3 ='sh -c grep -v grep '.execute(); 
Process proc4 ='sh -c awk sleep.sh '.execute(); 

Process all = proc1 | proc2 | proc3 | proc4; 

// I tried this too and this didnt work 

//println([ 'sh', '-c', 'ps -ef | grep "sleep.sh" | grep -v "grep" |  awk "sleep.groovy" ' ].execute().text) 

//also tried without the awk 

println all.text; 

좋아요. 그럼 내가하려는 것은 ps 쉘 스크립트입니다 (sleep.sh). 시각]. 어떻게하는지 잘 모르겠습니다. 이것은 나의 추측 ^^이었다Groovy 프로세스가 Linux 쉘 (grep 및 awk 및 ps)에서 작동하지 않습니다.

결과 :

-sh-3.2$ ./callGroovy.sh testSleep.groovy 


-sh-3.2$ 

나던 인쇄 아무것도 출력 및 i는 파이프 명령을 실행하는 경우 을 (callGroovy 내가 내 그루비 스크립트를 호출하는 데 사용하는 쉘 스크립트) 나에게 아무것도주지 나던 그들은 AWK 내가 잘못 AWK를하고있는 중이 야 생각 제외하고는 여전히 작동 을 heres 나머지는 파이프

-sh-3.2$ ps -ef | grep "sleep.sh" | grep -v "grep" 
wasadmin ***** ***** 0 **:** pts/1 **:**:** /bin/bash ./sleep.sh 

(모든 * 숫자 곳)

그냥 grep과 ps로 스크립트를 해보면 나에게도이 결과를 알려주지 않습니다. 어떤 제안? ..PS 또한 그루비 스크립트에서 따옴표를 사용하거나 사용하지 않으려 고 노력했습니다. didnt는 그것이 차이를 만들 것이라고 생각한다. 그러나 가치가있다.

+0

과 표준 에러 스트림을 읽고 도움이 될 수있다 '{에 println $ 2}' 그리고 그것은 그루비 구문으로 멋지게 연주하지 못했습니다. 하지만 그루비와 함께 멋지게 바꾸는 방법을 모르겠습니다. (비교적 Groovy를 처음 사용하는 경우) – Ian

+0

스크립트에 프로세스 ID가 무엇인지 알고 싶습니까? 스크립트가 성취하고자하는 것을 명시 적으로 언급 한 경우 가장 좋을 것입니다. –

+0

예. 나는 sleep.sh의 pid를 알고 싶습니다. – Ian

답변

1

-c 옵션은 1 개의 매개 변수만을 기대한다. 명령 줄에서이 작업을 시도하고 당신은 그것뿐만 아니라 실패 볼 수 있습니다 :

그것은 제대로 작동하려면 따옴표를 필요
sh -c ps -ef | sh -c grep sleep.sh | sh -c grep -v grep | sh -c awk sleep.sh 

:

sh -c "ps -ef" | sh -c "grep sleep.sh" | sh -c "grep -v grep" | sh -c "awk sleep.sh" 

당신은 명령을 제대로 인용 수의 목록을 시작하여 문자열 대신 문자열 : proc1 = ['sh', '-c', 'ps -ef']. 이 경우 Groovy에서 필터링을 수행하므로 단순한 해결책은 단순히 쉘을 통해 명령을 호출하지 않는 것입니다. 이 시도 : 일들이 제대로 작동하지 않는 경우

Process proc1 ='ps -ef'.execute() 
Process proc2 ='grep sleep.sh '.execute() 
Process proc3 ='grep -v grep '.execute() 
Process proc4 ='awk sleep.sh '.execute() 

Process all = proc1 | proc2 | proc3 | proc4 

println all.text 

마지막으로, 당신이 나는 또한 AWK를 시도 업데이트 유지하기 위해

println all.err.text 
관련 문제