加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash脚本错误地计算自己的实例

发布时间:2020-12-14 01:24:13 所属栏目:Linux 来源:网络整理
导读:我创建了一个bash脚本来计算自身的已启动实例. 这是(在这个例子中,我显示实例而不是用wc -l计算它们): #!/bin/bashnb=`ps -aux | grep count_itself.sh`echo "$nb"sleep 20 (当然,我的脚本名为count_itself.sh) 在执行它时,我希望它返回两行,但它返回三行:
我创建了一个bash脚本来计算自身的已启动实例.

这是(在这个例子中,我显示实例而不是用wc -l计算它们):

#!/bin/bash
nb=`ps -aux | grep count_itself.sh`
echo "$nb"
sleep 20

(当然,我的脚本名为count_itself.sh)

在执行它时,我希望它返回两行,但它返回三行:

root@myserver:/# ./count_itself.sh
root    16225   0.0 0.0 12400   1176 pts/0  S+  11:46   0:00    /bin/bash ./count_itself.sh
root    16226   0.0 0.0 12408   564 pts/0   S+  11:46   0:00    /bin/bash ./count_itself.sh
root    16228   0.0 0.0 11740   932 pts/0   S+  11:46   0:00    grep count_itself.sh

用&执行它标志(即在后台,并手动执行ps -aux位,它返回两个,这就是我想要的:

root@myserver:/# ./count_itself.sh &
[1] 16233
root@myserver:/# ps -aux | grep count_itself.sh
root     16233  0.0  0.0  12408  1380 pts/0    S    11:48   0:00 /bin/bash ./count_itself.sh
root     16240  0.0  0.0  11740   944 pts/0    S+   11:48   0:00 grep --color=auto count_itself.sh

我的问题是:为什么脚本中的ps -aux执行返回的行多于预期?

或者,换句话说,为什么在我的第一个例子中创建了id为16226的进程?

编辑(因为大多数人似乎误解了我的问题):

我想知道为什么bash执行返回/ bin / bash ./count_itself.sh的两个实例,而不是为什么它返回grep count_itself.sh.

编辑2:

当然,我正在寻找一种方法来避免这种行为,并让脚本只返回/ bin / bash ./count_itself.sh一次.

解决方法

这是greping ps输出的标准问题.

一种解决方案是在角色周围添加一些方括号

nb=$(ps -aux | grep '[c]ount_itself.sh')

这意味着您的grep实例与自身不匹配,因为带有参数的进程名称包含方括号,但它匹配的模式不包含.

如评论中所述,您应该在变量周围使用双引号以保留空格.

您在结果中看起来有两个相同shell实例的原因是命令替换是在子shell中执行的.有关仅显示父进程的详细信息,请参阅this question.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读