我想使用以下子句检查命令是否正在运行,但无论命令是否实际正在运行,结果if
总是如此:true
if [ $"(ps aux | grep curl)" ]; then echo is; else echo not; fi
结果:
[root@is ~]# if [ $"(ps aux | grep curl)" ]; then echo is; else echo not; fi
is
ps
之外的命令if
:
[root@is ~]# ps aux | grep curl
root 216564 0.0 0.2 6408 2064 pts/0 S+ 22:22 0:00 grep --color=auto curl
我如何检查curl
我的示例是否正在运行?
我尝试使用不同的参数ps
,但我总是有grep
命令(这在我看来是正常的),但我不知道如何检查它是否正在运行。
更新 1
我认为我可以做到这一点,但我不知道如何用命令做到这一点:
if ps aux blah
if it has only one line (I suppose somehow use `wc -l`
then do something
else do something else
fi
fi
答案1
您可以使用pgrep curl
,它仅在发现正在运行的进程时才返回进程 ID。例如:
[ -n "$(pgrep curl)" ] && echo "yes" || echo "no"
答案2
使用 grep 本身跳过行的常用技巧是使用某种正则表达式:
ps aux | grep '[c]url'
命令本身现在不包含字符串curl
本身,因此它不会匹配。
答案3
一种可能的方法是添加另一个grep
来过滤grep
流程
,而不是
ps aux | grep curl
做了
ps aux | grep curl | grep -v grep