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 '`

これにより、特に実行中のプーマプロセスがない場合、状況が正しく機能しない可能性があります。デフォルトのPIDをキャプチャできるように上記の内容をオーバーライドするか、少なくとも存在しない場合は、次の行に実行を渡すことを許可する方法を知っていますか?

答え1

を保存するには、set -e次の手順を実行してpgrepが失敗するのを防ぎます。

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

答え2

set -e コマンドがゼロ以外の状態で終了するとすぐに終了します。

pgrep一致するものがないと失敗するため、その文をPID実行できません。echo "after"

set -e削除すると問題が解決するようです。

関連情報