Oui un tableau ça ira trankilou
tomtom293 a écrit :
Bonjour à tous, J'ai essaye avec une boucle while, mais le pb est que je ne recupere que la derniere ligne...
|
C'est une histoire de subshell ça peut-être, dans le doute... :
Dans le script suivant :
#!/bin/bash I=-1 cat file.txt | while read REF_LINE; do (( I++ )) done echo "I = $I" J=-1 while [ $J -lt 100 ]; do (( J++ )) done echo "J = $J" |
L'affichage donne :
Pourquoi ? I n'est pas exporté en dehors de la boucle.
Lors du "cat | while read", le pipe a créé un subshell. I est modifiée
dans ce subshell, mais jamais dans le shell courant.
Il faut donc retenir qu'un pipe => un subshell, car par définition "un
pipe est un flux de données à sens unique entre deux processus"
D'où le script suivant pour résumer la situation :
#! /bin/sh # variable I du processus (père) I=0 cat $1 | # Le pipe arrive { # ici c'est le processus (fils) # le contenu de la variable I (père) a été exporté dans la variable I (fils) } # on est de retour dans le processus père # on retrouve donc I (père) et pas I (fils)
|
Message édité par Xavier_OM le 15-04-2009 à 12:02:33
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.