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

linux – Bash脚本错误地计算自己的实例,第1张

概述我创建了一个bash脚本来计算自身的已启动实例. 这是(在这个例子中,我显示实例而不是用wc -l计算它们): #!/bin/bashnb=`ps -aux | grep count_itself.sh`echo "$nb"sleep 20 (当然,我的脚本名为count_itself.sh) 在执行它时,我希望它返回两行,但它返回三行: root@myserver:/# ./count_i 我创建了一个bash脚本来计算自身的已启动实例.

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

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

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

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

root@myserver:/# ./count_itself.shroot    16225   0.0 0.0 12400   1176 pts/0  S+  11:46   0:00    /bin/bash ./count_itself.shroot    16226   0.0 0.0 12408   564 pts/0   S+  11:46   0:00    /bin/bash ./count_itself.shroot    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] 16233root@myserver:/# ps -aux | grep count_itself.shroot     16233  0.0  0.0  12408  1380 pts/0    S    11:48   0:00 /bin/bash ./count_itself.shroot     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.

总结

以上是内存溢出为你收集整理的linux – Bash脚本错误地计算自己的实例全部内容,希望文章能够帮你解决linux – Bash脚本错误地计算自己的实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1027718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存