プロセスの実行が停止したかどうかを確認するルーチンを作成していて、対象となるプロセスがなくなると何かを実行します。シェルwhileループが停止していない
は、私は(私の将来のコードのテストのように)このコードを思い付いた:
#!/bin/bash
value="aaa"
ls | grep $value
while [ $? = 0 ];
do
sleep 5
ls | grep $value
echo $?
done;
echo DONE
私の問題は、何らかの理由で、ループは決して停止しないということであると私は、ファイル「AAA」を削除した後、1をエコー。
Iが出力としてすぐに私は、ファイルを削除するよう「DONE」ことを期待する0
0 >>> I delete the file at that point (in another terminal)
1
1
1
1
.
.
.
...
問題は何ですか?
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" [$? = 0]; \t do \t sleep 1200 \t ps -ef | grep "mysqldump" | grep -v "grep mysqldump"; 完了。 tar cvzf [dumpdir] [ファイル] rm [ファイル] – Rgonomike
@Rgonomike: "while ps -ef | ... | grep mysqldump; do sleep 1200; done"と書くことができます。それはコードを簡素化します。 (psを構文解析するのは間違った方法ですが、mysqldumpの終了時に警告されるので、mysqldumpの親にフォローン処理をさせるのが本当に欲しいです。) –