J'ai une base de données SQlite est rempli quand quelqu'un ajoute un nom de fichier et dir, alors je veux que le script lise les 3 nouvelles entrées (faites avec le " LIMIT 3 ") alors je veux que ce script prenne ces 3 entrées et démarre le" script1.sh "pour chacune d'entre elles, puis une fois que le script1 a fini l'un des 3, je veux qu'il regarde dans la base de données SQlite et vérifie s'il y a de nouveaux entires et répétez. (donc un peu comme une file d'attente) NOTE, à la fin de script1.sh il y a une commande qui va supprimer son entrée de la DB SQlite. Donc, fondamentalement, je veux que le script vérifie la base de données SQlite à chaque fois qu'un script script1.sh se termine.Boucle SQlite3 base de données en continu, lorsque la requête a trouvé exécuter le script pour le premier 3
Jusqu'à présent, j'ai:
#!/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
Que devrait faire le script s'il n'y a rien de nouveau? – DigitalRoss
Continuez à vérifier la base de données pendant 5 secondes. Si possible, une sorte de commande de surveillance pour attendre que quelque chose de nouveau arrive. – Mint
Malheureusement, ce que vous voulez, c'est vraiment pousser la limite de ce que peut faire bash. Comme vous le savez, j'ai pris une fissure ci-dessous avec seulement des résultats partiels. Les problèmes sont (1) la commande shell sqlite3 ne renvoie pas d'erreurs. (2) bash n'a pas un bon moyen d'attendre la fin du processus * next *, il peut seulement attendre un ou plusieurs d'entre eux. C'est ennuyeux, car l'appel système brut * n'attend que le suivant. Le script pourrait piéger SIGCHLD (et donc obtenir le contrôle à la sortie de chaque enfant) mais j'étais inquiet des conditions de course en faisant l'arithmétique du shell dans un gestionnaire de signal. – DigitalRoss