Loop Sqlite3 base de datos de forma continua, la escritura de ejecución cuando se encontró consulta para el primer 3

StackOverflow https://stackoverflow.com/questions/1482603

Pregunta

He una base de datos SQLite se rellena cuando cada vez que alguien añade un nombre de archivo y dir a ella, entonces yo quiero que la secuencia de comandos para leer las 3 entradas más recientes (hecho con el "límite de 3") entonces yo quiero este script para tomar los 3 entradas e iniciar el "script1.sh" para cada uno de ellos, a continuación, una vez que el script1 ha terminado uno de los 3, quiero que se vea de nuevo en la base de datos SQLite y comprobar si hay nuevos entires y repetir. (De modo gustaría un poco una cola) NOTA, al final de script1.sh hay un comando que va a eliminar es la entrada de la SQlite DB.

Así que, básicamente, quiero que la secuencia de comandos para comprobar el SQlite DB cada vez que una secuencia de comandos script1.sh termina.

Hasta ahora tengo:

#!/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
¿Fue útil?

Solución

#!/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

No estaba segura de que realmente quería el más nuevo 3, ya que también ha dicho que quería una cola, así que me dieron el siguiente 3 cada vez, empezando por el primero.

Otros consejos

No es necesario utilizar echo y awk, Bash lo puede hacer por usted:

saveIFS=$IFS
IFS='|'
fileName=(${file})        # make an array
fileName=${fileName[2]}   # get an element
IFS=$saveIFS              # put it back like you found it

se echa en falta una "done", por cierto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top