Shell-Script

為什麼試圖擷取 PID 導致我的 shell 腳本神秘地終止?

  • May 15, 2018

我正在使用 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,或者如果它不存在,至少允許執行傳遞到下一行?

如果要保留set -e,則需要通過以下方式防止 pgrep 失敗:

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

set -e 如果命令以非零狀態退出,則立即退出。

由於pgrep沒有匹配時失敗,因此PID您無法執行echo "after"語句。

我認為,刪除set -e應該可以解決您的問題。

引用自:https://unix.stackexchange.com/questions/443827