programing

이전 명령이 성공한 경우 한 명령을 실행하고, 그렇지 않은 경우 다른 명령을 실행하는 방법

sourcejob 2023. 5. 24. 22:05
반응형

이전 명령이 성공한 경우 한 명령을 실행하고, 그렇지 않은 경우 다른 명령을 실행하는 방법

프로세스를 확인하려고 합니다(이 프로세스를 호출한다고 가정).some_process)가 서버에서 실행 중입니다.그렇다면 1을 에코하고, 그렇지 않으면 0을 에코합니다.

사용 중인 명령이지만 부분적으로만 작동합니다(아래 자세한 내용 참조).스크립트를 한 줄로 작성해야 합니다.

ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi

참고: The[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

다음을 최대한 활용할 수 있습니다.&&그리고.||다음과 같은 연산자:

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
pgrep -q some_process && echo 1 || echo 0

여기에 더 많은 한 의 정예가들

checkdb: image: mysql: 8.0.31 환경: MYSQL_ROOT_PASSWORD: ${MYSql_ROOT_PASSWORD} MYSQL_DATABASE:${MYsql_DATABASE}

entrypoint: sh -c  'while true; do 
                mysql -h ${DB_MYSQL:-db} --user=${MYSQL_USER:-root} --password=${MYSQL_ROOT_PASSWORD} --execute "use ${MYSQL_DATABASE};";
                if [ $? -eq 0 ]; then exit 0; fi; 
                sleep 5;
              done'

언급URL : https://stackoverflow.com/questions/17203122/how-to-run-one-command-if-a-previous-command-succeeds-otherwise-run-another-com

반응형