2017-01-16 2 views
-3

반환되는 값이 필요합니다. 아무거나 할 수 있습니다.비어 있지 않은 출력을 반환합니다. grep httpd | 머리 -1 | tail -c 9

이 코드는 서비스가 실행중인 경우 "08:10"을 반환합니다.

ps -eo comm,etime | grep httpd | head -1 | tail -c 9 

하지만 서비스가 실행되지 않으면 어떻게됩니까?

service httpd stop 

하고 다시 해보자 :

ps -eo comm,etime | grep httpd | head -1 | tail -c 9 

절대적으로 아무것도.

이 문제는 저에게 문제입니다. 내 PHP 배열 뭔가 함께 작동하도록 기대하고있다.

나는 어떻게 .. 아무것도 아닌 뭔가를 반환 할 수 있습니까?

거대한 복잡성에 의지하지 않고.

다음 시나리오가 나와도 괜찮습니다.

단순히 아마 그 컴퓨터에 대한 스트레스를 덜 것 ..

를 추가하거나에 관계없이 출력이 무엇인지 출력에 chracter을 prepanding?

단순히 출력에 "0"을 추가하십시오.

pgrep httpd 

프로세스가 종료 상태 ($?)를 실행하는 경우 STDOUT에 대한 통계와 함께, 0 될 것입니다 : 그것은 (빈) 아무것도없는 경우에도

+0

'| grep. || 에코 "일치하지 않음". – Cyrus

+0

'etime 만 원할 때 왜'comm'를 출력합니까? – hek2mgl

+0

음, 당신이 원하는 것은 (1) http의 pid 파일을 집어 넣고 그것으로부터 PID를 가져 오는 쉘 스크립트를 작성하는 것입니다. (2) PID가 여전히 실행 중인지 확인하고, 예인 경우 (3) ps가 실행됩니다 -o etime = -p PID || echo '00 : 00'' – hek2mgl

답변

0

이것은 pgrep위한 작업이다. 프로세스가 실행 중이 아니면 종료 상태는 1입니다.

당신이 원하는 경우, 전체 명령 행에 대한 일치 :

pgrep -f httpd 

당신이 STDOUT 필요가없는 경우 :

pgrep -f httpd >/dev/null 

당신이 STDOUT에 뭔가를 원하는 경우를 과정 가 실행되고 있지 않으면 실패한 사례에 대한 단락 회로 평가를 실시합니다.

pgrep httpd || echo NO 

프로세스가 실행 중이 아닌 경우 STDOUT에 NO을 출력합니다.

0

이 그렇게 복잡하지 않을 수 있습니다

내가 더 나은 선택이 될 것입니다 @heemayl 그 pgrep을 동의
ret=$(ps -eo comm,etime | grep httpd | head -1 | tail -c 9) 
if [ -z "$ret" ];then 
echo "What you want" 
else 
echo "${ret}" 
fi 
+0

@Suspended. 네, ret = "."라고 쓸 수 있습니다. $ (....); echo $ {ret} –

+0

@ Suspended. 나의 이전 대답은 틀렸다. 그렇지 않아. 파이프가있는 경우 if (트리 포함)가 매우 어렵습니다. –

0

. 그러나 도움이 될 수도 있습니다 :

{ ps -eo comm,etime; echo "httpd not running"; } | grep -m 1 httpd | cut -d- -f2 
+0

'printf'에 관해서 당신의 의견을 이해할 수 없을 까봐 두렵습니다. –