我有一个脚本,我要检查进程是否按其名称运行,我使用ps
和grep
进行操作。问题在于我要抓住很多东西以避免发现误报。
到目前为止,我的grep
链看起来如下:
ps -ef | grep -i $process_name | grep -i perl | grep -v do_all | grep -v grep
四grep
秒。其中三个是为了避免误报。
我想知道是否有办法避免这种“管道链”并使用单个grep
来实现相同的结果。
虽然你们中的一些人可以回答说有一个更清晰的方法来确定一个进程是否存在,但我希望能够回答这个问题,只是为了更好地理解grep
命令的用法。
答案 0 :(得分:2)
没有真正的理由避免将它们链接起来,是吗?
如果你真的想要,你可以将它们与|结合起来在egrep:
ps -ef | egrep -i "$process_name|perl" | egrep -v 'do_all|grep'
答案 1 :(得分:1)
这是使用GNU awk
的一种方式:
ps -ef | awk -v process="$process_name" 'BEGIN { IGNORECASE=1 } $0 ~ process && /perl/ && !/do_all/'