我正在編寫一個例程,它將識別進程是否停止運行,並在目標進程結束後執行某些操作。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退出時它會發出警報。) –