Bash : valeur de var en/hors boucle while
Résolu
IvyAlice
Messages postés
397
Statut
Membre
-
IvyAlice Messages postés 397 Statut Membre -
IvyAlice Messages postés 397 Statut Membre -
Bonjour à tous,
Petite question par rapport à un bout de code
voilà en gros je veut mettre dans 1 variable un nom de fichier + toutes les lignes qu'il contient, pour, à la fin, mettre tout ça dans un autre fichier, et avoir ce contenu sur une seule ligne.(le but c'est de faire un .csv avec chaque fois le nom d'un groupe et sur la même ligne tous les users qui sont dedans, mais bref c'est pas important)
donc dans la boucle, tout se fait juste, $lignefich est chaque fois égale à elle-même + la dernière valeur rajoutée.
par contre après le "done", $lignefich ne contient plus que ce qu'il contenait AVANT d'être passé dans la boucle.
Est-ce que la boucle fait son truc dans un genre de sous-shell ?
Comment faire pour éviter cela ?
Merci d'avance pour vos conseils et suggestions.
Ivy
Petite question par rapport à un bout de code
[code tronqué]
lignefich="${g:4}" #commence la variable avec le nom de fichier
cat /tmp/$g | #parcourt les lignes du fichier /tmp/g
while read u
do
lignefich="$lignefich ; $u" # ma variable = elle-même + la ligne du fichier
echo "ligne est mnt: $lignefich"
done
echo "le resultat final pour lignefich : $lignefich"
voilà en gros je veut mettre dans 1 variable un nom de fichier + toutes les lignes qu'il contient, pour, à la fin, mettre tout ça dans un autre fichier, et avoir ce contenu sur une seule ligne.(le but c'est de faire un .csv avec chaque fois le nom d'un groupe et sur la même ligne tous les users qui sont dedans, mais bref c'est pas important)
donc dans la boucle, tout se fait juste, $lignefich est chaque fois égale à elle-même + la dernière valeur rajoutée.
par contre après le "done", $lignefich ne contient plus que ce qu'il contenait AVANT d'être passé dans la boucle.
Est-ce que la boucle fait son truc dans un genre de sous-shell ?
Comment faire pour éviter cela ?
Merci d'avance pour vos conseils et suggestions.
Ivy
A voir également:
- While bash
- Bingo bash free - Télécharger - Divers Jeux
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
- Bash permission non accordée - Forum Shell
- Bash list ✓ - Forum Shell
2 réponses
Salut,
C'est la faute au "pipe" ( | ) qui crée un sous-shell (shell fils) et de ce fait les variables ne sont pas importées en dehors et ne remontent donc pas chez le père ;-(
Pour palier à ce problème il faut éviter le "pipe" en faisant un :
;-))
C'est la faute au "pipe" ( | ) qui crée un sous-shell (shell fils) et de ce fait les variables ne sont pas importées en dehors et ne remontent donc pas chez le père ;-(
Pour palier à ce problème il faut éviter le "pipe" en faisant un :
while read u
do
lignefich="$lignefich ; $u"
echo "ligne est mnt: $lignefich"
done < /tmp/${g}
echo "le resultat final pour lignefich : $lignefich"
;-))