Re: lire ds un fichier (en bash)

Startseite

Nachricht beantworten
Autor: Jean-Pierre Morin
Datum:  
To: guilde
Betreff: Re: lire ds un fichier (en bash)
Le Jeudi 16 Octobre 2003 11:33, LIGIER Philippe a écrit :
> On Thu, 16 Oct 2003 10:17:36 +0200, Jean-Pierre Morin
>
> <jeanpierre.morin@???> wrote:
> > Le Jeudi 16 Octobre 2003 09:47, cly@??? a écrit :



> >>
> >> En bash, il faut faire
> >> cat mon_fichier | while read ma_var
> >> do
> >> ...
> >> done
> >>
> >>
> >> Christophe.
> >
> > Oui, ca marche mais avec un inconvenient.
> > Le "while" crée un sous-shell, ce qui fait que toutes les variables
> > créees
>
> Tu es certain que la boucle while génère un sous-shell ?!!


Oui, je viens de refaire les 2 tests ci-dessous:

essai_1.sh ---------------
VAR=1
echo -e "Entre VAR=$VAR"

cat $1 |  while read LIGNE
do
#       echo -e "LIGNE=$LIGNE"
        echo -e "Boucle VAR=$VAR"
        VAR=2
done
echo -e "Sortie VAR=$VAR"
--------------------
Ce qui donne à l'execution de : essai_1.sh essai_1.sh
Entre VAR=1
Boucle VAR=1
Boucle VAR=2
Boucle VAR=2
Sortie VAR=1


essai_2.sh --------------
VAR=1
echo -e "Entre VAR=$VAR"
while read LIGNE
do
#       echo -e "LIGNE=$LIGNE"
        echo -e "Boucle VAR=$VAR"
        VAR=2
done <$1
echo -e "Sortie VAR=$VAR"
--------------------
Ce qui donne à l'execution de : essai_2.sh essai_2.sh
Entre VAR=1
Boucle VAR=1
Boucle VAR=2
Boucle VAR=2
Boucle VAR=2
Boucle VAR=2
Sortie VAR=2


Dans essai_1.sh on voit qu'en sortie la variable VAR n'a pas été modifiée.
La boucle est un process-fils qui herite de la variable VAR, mais le
process-père ne recupère pas les variables du fils quand celui-ci meure.
Dans essai_2.sh il n'y a pas de sous-shell de crée.
Pour le cas qui nous interresse, il est préférable d'utiliser essai_2.sh



>
> > ou modifiées dans la boucle do-done ne seront pas accessibles lorsqu'on
> > sera sorti de la boucle du while.
> > Selon ce qu'on veut faire, c'est très génant.
> >
> > JPM