我正在使用 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
应该可以解决您的问题。