Passage de variable depuis une boucle ???

Passage de variable depuis une boucle ??? - Shell/Batch - Programmation

Marsh Posté le 10-01-2005 à 13:55:51    

Salut à tous et toutes et bonne année...
 
Je voudrais vous soumettre un petit pb que j'ai avec un script shell :
 

Code :
  1. if [ -e $FILE_EXT ]
  2. then
  3.     cat < $FILE_EXT | while true
  4.     do
  5.         read temp_line2
  6.         if [ -z "$temp_line2" ]; then break; fi
  7.   tablespace2=$temp_line2
  8.   echo tablespace fr= "$tablespace"
  9.   echo tablespace2= "$tablespace2"
  10.   if [ "$tablespace" = "$tablespace2" ]
  11.   then
  12.    already_exists="1"
  13.    echo already_exists 28= $already_exists
  14.    break
  15.   else
  16.    already_exists="0"
  17.    echo already_exists 32= $already_exists
  18.   fi
  19.   echo already_exists 34= $already_exists
  20.  done
  21.  echo already_exists 36= $already_exists
  22. fi
  23. echo already_exists 39= $already_exists
  24. return $already_exists


 
me renvoie :
 
tablespace fr= ALERT_IDX
tablespace2= ALERT
already_exists 32= 0
already_exists 34= 0
already_exists 36=
already_exists 39=
already_exists 61= 0
 
tablespace fr= ALERT_IDX
tablespace2= ALERT
already_exists 32= 0
already_exists 34= 0
tablespace fr= ALERT_IDX
tablespace2= ALERT_IDX
already_exists 28= 1
already_exists 36= 0
already_exists 39= 0
already_exists 61= 0
 
tablespace fr= ALERT_IDX
tablespace2= ALERT
already_exists 32= 0
already_exists 34= 0
tablespace fr= ALERT_IDX
tablespace2= ALERT_IDX
already_exists 28= 1
already_exists 36= 0
already_exists 39= 0
already_exists 61= 0
 
Ce qui veut dire que la variable already_exists ne passe pas correctement la sortie de la boucle dans laquelle elle est initiée...
 
Je ne comprends pas ce qui peut se passer...
Quelqu'un peut-il me renseigner SVP ?

Reply

Marsh Posté le 10-01-2005 à 13:55:51   

Reply

Marsh Posté le 10-01-2005 à 15:55:56    

Piege classique de read avec les pipes... La partie gauche de ton pipe (la boucle while) est exécutée dans un sous-process (forcément, comment veux-tu qu'il fasse le cat et le read en même temps sinon). Donc already_exists est une variable d'environement dans ton sous process. Après ta boucle while, tu es à nouveau dans le process père. Evidemment already_exists n'a pas été modifié dans ce process : un process fils n'a pas accès à l'environnement de son père.
 
Un facon de contourner ce "problème" est de mettre toute la partie du script qui utilise already_exists entre parenthèses, de maninère à ce que toutte cette partie soit exécutée dans le même process fils. Ouvre la parenthèse avant le while, ferme la avant le return.

Reply

Marsh Posté le 10-01-2005 à 16:05:42    

Bon sang mais c'est bien sur !!!   :pt1cable:  
 
Merci beaucoup pour ton aide...

Reply

Sujets relatifs:

Leave a Replay

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