微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么在使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。