Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/02/2007, à 12:58

paul@gloomoot

[Bash] Boucle while - export variable

Bonjour,

J'ai une question... quand j'exécute le script suivant :

#!/bin/bash

I=-1;
cat file.txt | while read REF_LINE
do
{
   let I++;
}
done
echo "I = "$I;


J=-1;
while [ $J -lt 100 ]
do
{
   let J++;
}
done
echo "J = "$J;

j'obtiens l'affichage :

I = -1
J = 100

Pourquoi la variable I n'est elle pas exportée hors de la boucle?
Et surtout, comment faire pour récupérer sa valeur?

Merci d'avance de votre aide smile


http://leblogdepaul.free.fr

Hors ligne

#2 Le 14/02/2007, à 13:36

any

Re : [Bash] Boucle while - export variable

hum comme ca ca devrait marcher

I=-1

while read ligne
do
{
   let I++;
}
done < file.txt

echo "I = "$I;

#3 Le 14/02/2007, à 14:25

paul@gloomoot

Re : [Bash] Boucle while - export variable

Woohoo big_smile \o/

Merci beaucoup! Ca marche !

T'as une idée de pourquoi ça me fait cette erreur?


http://leblogdepaul.free.fr

Hors ligne

#4 Le 14/02/2007, à 14:55

paul@gloomoot

Re : [Bash] Boucle while - export variable

Une explication qu'on m'a donné sur linuxfr :

Lorsque tu fais "cat file | commande", en interne bash forke un sous-shell, avec tout son environnement, pour "commande" et le connecte au pipe.
Dans ton cas, tout ce qui est fait par le "while..." est dans ce sous-shell, y compris l'incrémentation de la variable. Mais l'environnement du sous-shell n'est pas retransmis au père à la fin ! Quand tu lis cette variable plus loin dans ton script, elle a toujours sa valeur d'avant le fork. C'est une "autre" variable en somme.

Voilà pour ceux que ça intéresse.

Merci encore smile


http://leblogdepaul.free.fr

Hors ligne