问题描述
当我计算要使用的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