代码 :
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
,其命令行中包含该程序。