shell 脚本中的 pgrep -f 返回 2 pid 而不是 1

shell 脚本中的 pgrep -f 返回 2 pid 而不是 1

代码 :

function main {
  
    [ -z "$@" ] && { getProcessId "$@" } || "$@"
}


getProcessId(){

matchType=$1
#defaulting matchArg to x i.e exact match
matchArg=x
processName=$2

if [[ $matchType == 'contains' ]];then
  matchArg=f
elif [[ $matchType == 'exact' ]];then
  matchArg=x
fi

if processId=`pgrep -$matchArg $processName`
then
echo "process id fetch is successful" 
else
 echo "process id fetched is blank" 
fi

echo "$processId"

}


main "$@"

用于运行脚本的命令 -./a.sh getProcessId 包含 ServiceResilience

它返回 2 个 pid 而不是 1 个,如果我直接在 cmd 上运行:pgrep -f 服务弹性它仅返回 1 个 pid(例外)。

答案1

脚本返回的两个 PID 是解释脚本的进程的 PID(其命令行中包含 ServiceResilience)和 的 PID pgrep(其命令行中也包含 ServiceResilience)。如果直接在终端窗口中运行,则不会运行该脚本,因此只有一个程序。pgrep,其命令行中包含该程序。

相关内容