私はあなたがうまくいっていることを願っています!私はディレクトリにデータが入力されるまでディレクトリを頻繁にポーリングしようとしています。終了すると、linux環境のbashスクリプトを使ってディレクトリ上で次のタスクを実行したいのです。私はinotify-toolsにアクセスすることはできません。私はこのプロセスをテストしてい方法は1つのシェルコマンドラインに次のように入力して、次のとおりです。Linux環境でBASHスクリプトで次のコマンドを実行するwhileループを残す
while true; do touch /home/tmp/fun_temp/nothing.txt; sleep 10; rm -rf /home/tmp/fun_temp/nothing.txt; done
これはnothing.txtと呼ばれる一時ディレクトリにファイルを作成し、10秒スリープして、それを削除し、その後、それをしません私がそれを止めるように言うまで、再び。私のbashスクリプトはディレクトリを20秒間隔で監視し、20秒でディレクトリ情報をold_stat.txtというファイルに書き込みます。それから20秒後、new_statと古いstatを比較し、等しい場合はループを終了してコマンドの次の部分を実行し、ポーリングを保持していない場合は実行します。ここに私のbashスクリプトがあります:
#!/bin/bash
DIR_TO_CHECK='/home/tmp/fun_temp/'
OLD_STAT_FILE='/home/sleep_files/old_stat.txt'
if [ -e $OLD_STAT_FILE ]; then
OLD_STAT=`cat $OLD_STAT_FILE`
else
OLD_STAT="nothing"
fi
NEW_STAT=`stat -t $DIR_TO_CHECK`
while true; do
if [ "$OLD_STAT" != "$NEW_STAT" ]; then
echo 'Directory is still updating.'
sleep 20
echo $NEW_STAT > $OLD_STAT_FILE
echo 'Checking again.'
elif [ "$OLD_STAT" == "$NEW_STAT" ]; then
echo 'Directory is done updating. Move on.'
exit 0
fi
done
私は現時点でチェックとして出口0を使用しています。上記のwhileループをコマンドラインで実行し、次に別のシェルでこのbashスクリプトを実行してから、ディレクトリが変更されたことを確認してから、whileループをkillしますbashスクリプトをもう一度実行させますが、スクリプトを終了してもう一度実行しない限り、それは決して2番目の条件に変わり、ループを去りません。どんな助けも素晴らしいだろう、ありがとう!
、スクリプトは/ fun_tmp'' /ホーム/ tmpのを確認しています。 – Barmar
@Barmarこれは私のスクリプトでは正しいですが、これを書いたときの私の見落としでした。 –
シェルスクリプトをデバッグする最も良い方法は、 'set -x'を最初に置くことです。実行された各コマンドが表示され、変数が展開されます。 – Barmar