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
삭제하면 문제가 해결될 것 같습니다 .