我正在编写一个例程,它将识别进程是否停止运行,并在目标进程结束后执行某些操作。shell while循环不停止
我想出了这个代码(为我将来的代码测试):
#!/bin/bash
value="aaa"
ls | grep $value
while [ $? = 0 ];
do
sleep 5
ls | grep $value
echo $?
done;
echo DONE
我的问题是,由于某种原因,该循环永远不会停止,呼应1我删除文件“AAA”之后。
0
0 >>> I delete the file at that point (in another terminal)
1
1
1
1
.
.
.
我期望的输出被“DONE”只要我删除文件...
什么问题?
SOLUTION:
#!/bin/bash
value="aaa"
ls | grep $value
while [ $? = 0 ];
do
sleep 5
ls | grep $value
done;
echo DONE
谢谢,这仅仅是一个例子。我的最终命令是: ps -ef | grep“mysqldump”| grep -v“grep mysqldump” while [$? = 0]; \t do \t sleep 1200 \t ps -ef | grep“mysqldump”| grep -v“grep mysqldump”; 完成; tar cvzf [dumpdir] [files] rm [files] – Rgonomike
@Rgonomike:你可以这样写:“while ps -ef | ... | grep mysqldump; do sleep 1200; done”。这将简化代码。 (虽然解析ps的方法是错误的,但你真正想要的是让mysqldump的父节点执行后续处理,因为当mysqldump退出时它会发出警报。) –