프로세스 (라고 가정 some_process)가 서버에서 실행되고 있는지 확인하려고 합니다. 그렇다면 echo 1, 그렇지 않으면 echo 0.
이것은 내가 사용하는 명령이지만 부분적으로 만 작동합니다 (아래 자세한 정보 참조). 스크립트를 한 줄에 작성해야합니다.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
참고 :[s] 에이 some_proces[s]방지하는 것 grep자체를 반환에서.
some_process실행 중이 면 "1"반향이 발생합니다. 그러나 some_process실행 중이 아니면 아무 것도 에코되지 않습니다.
답변
명시 적으로 확인할 필요가 없습니다 $?. 그냥 해:
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
이것은 에코 실패에 의존하므로 확실히 보장되지는 않습니다. 이것을 작성하는보다 안정적인 방법은 다음과 같습니다.
if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi
답변
&&“그리고 성공하면”을 의미한다; if명령문을 오른쪽 에 배치 하면 grep리턴시 에만 실행되도록해야 합니다 0. 수정하려면 ;대신 사용하십시오.
ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi
(또는 그냥 줄 바꿈을 사용하십시오).
답변
사용 grep -vc무시 grep의 ps출력과 동시에 라인을 계산합니다.
if [[ $(ps aux | grep process | grep -vc grep) > 0 ]] ; then echo 1; else echo 0 ; fi
답변
다음 &&과 ||같이 and 연산자를 최대한 활용할 수 있습니다 .
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
grep 자체를 제외하기 위해 다음과 같은 작업을 수행 할 수도 있습니다.
ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0
