[Shell/Unix] Reactualisation de variable dans une boucle

Reactualisation de variable dans une boucle [Shell/Unix] - Shell/Batch - Programmation

Marsh Posté le 15-12-2011 à 14:54:28    

Bonjour,  
 
Je suis confronter a un problème
 
je doit faire une recherche successive de dependances de jobs.
pour cela j'ai créée une boucle while, avec en entré un fichier, contenant les dependances a rechercher.
juste avant de terminé la boucle, je met les nouvelles infos a rechercher, et je recommence.
 
Problème, en tant que tel, même en mettant le fichier a jour dans la boucle, le while prend toujours les memes infos en entrée.
Du coup j'ai fait une mini fonction qui relance la boucle, c'est moche, mais ca marche.
j'ai mis ca sous forme de fonction, et il me suffit d'appeler rech_pred.
 
Je sais qu'en batch Windows, il existe un setlocal enabledelayedexpansion, et je me demandais si y'avait pas un truc similaire sous KSH.
ce qui m'eviterais de faire un call de ma fonction en etant deja dedans.
 
Mon script actuel :

Code :
  1. rech_pred () { #recherche de predecesseurs
  2. while read PRED
  3. do
  4. ...
  5.  grep "\-$CPT" $WORK/DEP.lst | cut -f2 > $WORK/tmp_dep
  6.  renew rech_pred
  7. done < $WORK/tmp_dep
  8. }
  9. renew () { #relance de recherche $1 = fonction a relancer
  10. if [ -n "$(cat $WORK/tmp_dep)" ]
  11. then
  12.  $1
  13. fi
  14. }


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 15-12-2011 à 14:54:28   

Reply

Marsh Posté le 15-12-2011 à 15:17:16    

salut,
 
regarde si ça peut t'aider

Code :
  1. while [ -s fichier ]
  2. do
  3.   while read
  4.   do
  5.      ...
  6.      grep >fichier
  7.   done <fichier
  8. done

Reply

Marsh Posté le 16-12-2011 à 12:35:17    

pas mieux, le script ne rend jamais la main.
après interruption, la valeur dans le fichier n'a pas changer.


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 16-12-2011 à 14:36:30    

je ne comprend pas

Code :
  1. $ cat fichier.list
  2. foo1
  3. bar1
  4. baz1
  5. foo2
  6. bar2
  7. baz2
  8. $ n=0
  9. $ dest=fichier.dest
  10. $ echo vide > $dest
  11. $ while [ -s "$dest" -a "$n" -lt 5 ]; do while read line; do grep '^foo' fichier.list >$dest; done <$dest; echo "boucle $((++n))"; done
  12. boucle 1
  13. boucle 2
  14. boucle 3
  15. boucle 4
  16. boucle 5
  17. $ cat $dest
  18. foo1
  19. foo2


Message édité par Profil supprimé le 16-12-2011 à 14:36:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed