Pgrep

pgrep -f 以 1 退出

  • August 11, 2020
RUNNING_APPS=$(pgrep -f "somePattern")
echo $?

#results in
1

如何使用退出程式碼 0 使我的命令通過?

在我的 Arch 系統上,使用pgrepfrom procps-ng,我在man pgrep

EXIT STATUS
      0      One  or  more processes matched the criteria. For
             pkill the process must also  have  been  success‐
             fully signalled.
      1      No  processes  matched  or  none of them could be
             signalled.
      2      Syntax error in the command line.
      3      Fatal error: out of memory etc.

所以這就是它的方式:pgrep如果一切正常但沒有與搜尋字元串匹配的程序,將以 1 退出。這意味著您將需要使用不同的工具。也許像 Kusalananda 在評論中提出的建議和ilkkachu 作為答案發布

running_apps=$(pgrep -f "somePattern" || exit 0)

但是,IMO 更好的方法是更改​​您的腳本。而不是使用set -e,讓它在重要步驟中手動退出。然後,你可以使用這樣的東西:

running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
   echo "none found"
else
   echo "$running_apps running apps"
fi

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