prob de variable (debutant)

prob de variable (debutant) - Shell/Batch - Programmation

Marsh Posté le 07-12-2004 à 21:13:14    

bonjour a tous,
voila j'ai un petit soucis.Voici le code :

Code :
  1. ligne="p"
  2. toto="m"
  3. cat sauv.txt | while read ligne
  4. do
  5. toto=$ligne
  6. echo $toto
  7. done
  8. echo $toto
  9. echo $toto


 
quand je fais les deux derniers echo il m'affiche deux fois m alosr que j'aimarai la derniere ligne du fichier.
pourquoi ca marche pas ???
 
merci d'avance
 
 

Reply

Marsh Posté le 07-12-2004 à 21:13:14   

Reply

Marsh Posté le 08-12-2004 à 02:12:32    

Parce que ton shell fork deux autres shells pour les parties droites et gauches de ton pipe. Ton toto est bien assigné, mais... Dans le sous shell qui est lancé pour la partie droite du pipe, pas dans le shell père (celui qui exécute ton script). C'est l'exemple typique de mauvaise utilisation de read (remarque que ca marche quand même sous certains shells pour une raison que j'ignore).


Message édité par matafan le 08-12-2004 à 02:13:37
Reply

Marsh Posté le 08-12-2004 à 13:52:02    

matafan a écrit :

Parce que ton shell fork deux autres shells pour les parties droites et gauches de ton pipe. Ton toto est bien assigné, mais... Dans le sous shell qui est lancé pour la partie droite du pipe, pas dans le shell père (celui qui exécute ton script). C'est l'exemple typique de mauvaise utilisation de read (remarque que ca marche quand même sous certains shells pour une raison que j'ignore).


Ca marche en "korn shell" mais moi non plus, je sais pas pourquoi
 
En revanche, si tu veux pouvoir afficher la variable "toto" à la fin de la boucle, il faut grouper la boucle "while" et l'affichage "echo" dans un seul process en utilisant les parenthèses

Code :
  1. ligne="p"
  2. toto="m"
  3. cat sauv.txt | ( while read ligne
  4. do
  5. toto=$ligne
  6. echo $toto
  7. done
  8. echo $toto
  9. echo $toto
  10. )

Reply

Marsh Posté le 08-12-2004 à 19:34:22    

ok merci a tous les deux

Reply

Sujets relatifs:

Leave a Replay

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