为什么在使用bash -x时num是错误的

问题描述

当我计算要使用的wc -l 的进程号时,在命令行中该数字为2,但是在shell脚本中发现该数字为4,这是怎么回事?

$ ps -ef |grep -v grep |grep etcd  |wc -l
2
$ bash -x count.sh etcd
++ ps -ef
++ grep -v grep
++ grep etcd
++ wc -l
+ num=4
+ case $1 in
+ echo 4
4

shell脚本

#!/usr/bin/env bash

num=$(ps -ef |grep -v grep |grep etcd  |wc -l)

case $1 in
etcd) 
    echo ${num}
;;

*) 
   echo  "other"

;;
esac

解决方法

我猜您正在使用以下参数调用脚本:count.sh etcd。该脚本本身将成为ps输出的一部分,该输出确实会添加到结果中。

使用pgrep就是为了这个

pgrep -c etcd

我进一步建议使用-x(完全匹配)参数,以防止它与etcdctl匹配,例如:

pgrep -xc etcd

#!/usr/bin/env bash

num=$(pgrep -xc etcd)

case $1 in
etcd) 
    echo "${num}"
;;

*) 
   echo  "other"

;;
esac