PID를 캡처하려고 하면 쉘 스크립트가 알 수 없는 이유로 종료되는 이유는 무엇입니까?

PID를 캡처하려고 하면 쉘 스크립트가 알 수 없는 이유로 종료되는 이유는 무엇입니까?

CentOS 7을 사용하고 있습니다. 스크립트 변수에서 프로세스의 "기본 PID"를 캡처하려고 합니다. 이건 내 스크립트야

#!/bin/sh

set -e

PID="$APP_ROOT/shared/pids/puma.pid"
echo "before ..."
MASTER_PID=`pgrep -f '^([^ ]*/)?puma '`
echo "after ..."
xxx

그러나 "after..."라는 단어는 인쇄되지 않습니다. 이 라인에는 뭔가가 있어요

MASTER_PID=`pgrep -f '^([^ ]*/)?puma '`

이로 인해 특히 실행 중인 puma 프로세스가 없는 경우 상황이 잘못 작동할 수 있습니다. 기본 PID를 캡처할 수 있도록 위의 내용을 재정의하거나 적어도 존재하지 않는 경우 다음 줄로 실행이 전달되도록 허용하는 방법을 아는 사람이 있습니까?

답변1

을 보존하려면 set -e다음을 수행하여 pgrep이 실패하는 것을 방지해야 합니다.

MASTER_PID=`pgrep -f '^([^ ]*/)?puma ' || true`

답변2

set -e 명령이 0이 아닌 상태로 종료되면 즉시 종료됩니다.

pgrep일치하는 항목이 없으면 실패하므로 해당 문을 PID실행할 수 없습니다 .echo "after"

set -e삭제하면 문제가 해결될 것 같습니다 .

관련 정보