我有这个:
while [ "ps aux | grep '[0]:00 Xvfb :99 -screen 0 1024x768x16'" ]
do
echo "sleep"
ps aux | grep "[0]:00 Xvfb :99 -screen 0 1024x768x16"
sleep 1
done
这给了我:
sleep
sleep
sleep
sleep
sleep
sleep
root 7 0.5 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root 7 0.4 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root 7 0.3 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb :99 -screen 0 1024x768x16
...
...
...
如果ps aux | grep
返回0(意味着Xvfb进程正在运行),如何更改我的oneliner以便退出循环?
答案 0 :(得分:7)
目前,您正在评估字符串是否为空(在bash中,[ "string" ]
等同于[ -n "string" ]
)。
如果要在模式匹配时退出,请使用:
while ! ps aux | grep -q '[0]:00 Xvfb :99 -screen 0 1024x768x16'; do
echo "sleep"
sleep 1
done
grep的-q
选项启用“安静模式”,因此输出被抑制。
请注意,您可以(应该?)使用pgrep
代替您的管道:
while ! pgrep '0:00 Xvfb :99 -screen 0 1024x768x16'; do
# ...