为什么尝试捕获 PID 会导致我的 shell 脚本神秘终止?

为什么尝试捕获 PID 会导致我的 shell 脚本神秘终止?

我正在使用 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 如果命令以非零状态退出,则立即退出。

由于pgrep没有匹配时失败PID,因此您无法执行echo "after"语句。

我认为,删除set -e应该可以解决您的问题。

相关内容