这是(在这个例子中,我显示实例而不是用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脚本错误地计算自己的实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)