最初の3のためのループSQLite3のデータベース継続的に、クエリが見つかった実行スクリプト
質問
誰かがそれにファイル名とディレクトリを追加し、これまで、私はスクリプトが(「LIMIT 3」で行う)最新の3つの項目を読みたいとき
私はSQLiteのデータベースは、私は、このスクリプトは、これらの3を取りたい埋めますしていますエントリおよびそれらのそれぞれについて、「script1.sh」を起動し、[SCRIPT1は3の1を終えた後、私はそれがSQLiteデータベースに振り返ると、新しいのentiresと繰り返しがあるかどうかを確認します。 (そうちょっとキューなど) NOTEは、script1.shの終わりに、それはSQLiteのDBからのエントリの削除するコマンドがあります。
だから、基本的に私は、スクリプトがSQLiteのDBを一のscript1.shスクリプトが終了するたびにチェックしたい。
これまでのところ、私は持っています:
#!/bin/bash
sqlite3 /database.db "SELECT * FROM main ORDER BY mKey ASC LIMIT 3" | while read file
do
fileName=`echo "$file" | awk '{split($0,a,"|"); print a[2]}'`
echo "$fileName"
#Run script
./script1.sh "$fileName" "$file"
done
解決
#!/bin/bash
key=0
while :; do
sqlite3 -column ./test.db \
"SELECT * FROM main WHERE mKey > $key ORDER BY mKey ASC LIMIT 3" > tmpFile
lastKey=$key
while read k f; do
key=$k
echo start script1 on $f here current key is $k
done < tmpFile
[ $key -eq $lastKey ] && sleep 1
done
あなたも、あなたがキューを望んでいたので、私は最初から始まる、の次のの3たびを得たと述べたことからです。 私は、あなたが本当に最新3が欲しかっ確認されませんでした
他のヒント
あなたはecho
とawk
を使用する必要はありません、バッシュはあなたのためにそれを行うことができます:
saveIFS=$IFS
IFS='|'
fileName=(${file}) # make an array
fileName=${fileName[2]} # get an element
IFS=$saveIFS # put it back like you found it
あなたは道で、 "done
を" 欠落している。
所属していません StackOverflow