Bash : valeur de var en/hors boucle while
Résolu
IvyAlice
Messages postés
379
Date d'inscription
Statut
Membre
Dernière intervention
-
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
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:
- Do while bash
- Bingo bash - Télécharger - Divers Jeux
- My people do - Télécharger - Organisation
- Bash addition ✓ - Forum Shell
- Do not turn off target traduction - Forum Samsung
- Samsung galaxy tab S Bloquer Downloading do not turn off target - Forum Téléphones & tablettes Android
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"
;-))