Visibilite des variables dans un shell
Fermé
Haiti
-
23 janv. 2003 à 14:19
homer_bdx Messages postés 6 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 1 novembre 2017 - 1 nov. 2017 à 15:31
homer_bdx Messages postés 6 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 1 novembre 2017 - 1 nov. 2017 à 15:31
A voir également:
- Doriane vient d’ouvrir un restaurant à lyon. en plus des actions menées sur son site web, elle souhaite développer la visibilité de son restaurant. pour cela, elle peut utiliser différentes techniques.
- Site de telechargement - Accueil - Outils
- Comment ouvrir un fichier epub ? - Guide
- Site pour vendre des objets d'occasion - Guide
- Comment restaurer un pc - Guide
- Ouvrir un fichier .bin - Guide
10 réponses
EDIT : Je n'ai pas trouvé comment modifié mon post précédent... La parenthèse fermante n'était pas bien placée.
C'est un problème de "Père & Fils".
Après le "done", on revient dans le processus principal.
une solution consiste à rester dans le processus fils en ajoutant un jeu de parenthèse.
$ var=rien; cat - | (
while read f
do
var=$f
done
echo $var
)
a
a
--
Tof
C'est un problème de "Père & Fils".
Après le "done", on revient dans le processus principal.
une solution consiste à rester dans le processus fils en ajoutant un jeu de parenthèse.
$ var=rien; cat - | (
while read f
do
var=$f
done
echo $var
)
a
a
--
Tof
C'est un problème de "Père & Fils".
Après le "done", on revient dans le processus principal.
une solution consiste à rester dans le processus fils en ajoutant un jeu de parenthèse.
$ var=rien; cat - | (
while read f
do
var=$f
done
)
echo $var
a
a
--
Tof
Après le "done", on revient dans le processus principal.
une solution consiste à rester dans le processus fils en ajoutant un jeu de parenthèse.
$ var=rien; cat - | (
while read f
do
var=$f
done
)
echo $var
a
a
--
Tof
Je ne connais pas ce langage mais est ce que ta variable dans ton while do ne serait pas en local. Normalement dan tous les lagages que j'ai appris le while do à les mêmes propriétés de variable que le while ou le for mais bon on sait jamais
Le bourne shell est en fait le shell sh.
J'ai constaté que les variables dans une boucle while ne sont pas visibles à l'extérieur du bloc alors que ca l'ai dans la boucle for.
Le fait que la variable soit globale ou locale ne change rien car j'ai fait un export de celle ci et cela n'a rien fait de plus.
J'ai constaté que les variables dans une boucle while ne sont pas visibles à l'extérieur du bloc alors que ca l'ai dans la boucle for.
Le fait que la variable soit globale ou locale ne change rien car j'ai fait un export de celle ci et cela n'a rien fait de plus.
c'est vrai que c'est vraiment bizarre ton truc. Peux tu mettre ta requête au complet pour regarder ça de plus près.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En résumé cela ressemble à ca :
#!/bin/sh
while read line_in
do
if [ $i -eq 1 ]
then
var1="$i.$line_in"
elif [ $i -eq 2 ]
then
var2="$i.$line_in"
etc ...
fi
i=`expr $i + 1`
done < file_in.txt
#Si je fais echo des mes variables var... -> pas de résultat uniquement blank
echo $var1
echo $var2
etc ....
alors que si j'utilises
for line_in in `cat file_in.txt`
do
...
done
Ca marche.
#!/bin/sh
while read line_in
do
if [ $i -eq 1 ]
then
var1="$i.$line_in"
elif [ $i -eq 2 ]
then
var2="$i.$line_in"
etc ...
fi
i=`expr $i + 1`
done < file_in.txt
#Si je fais echo des mes variables var... -> pas de résultat uniquement blank
echo $var1
echo $var2
etc ....
alors que si j'utilises
for line_in in `cat file_in.txt`
do
...
done
Ca marche.
petite remarque: au lieu du set essayez export du genre:
TOTO="Ceci est un bidule"
export TOTO
si vous etes pressé faites:
export TOTO=Ceci est un bidule"
explication:
Quand on a un shebang du genre
debut prog1
#!/bin/sh
...
fin prog1
un environnement est cree de debut prog1 à fin prog1.
set ou export dans ce programme sera local au programme mais inaccessible de l'extérieur du programme(à cause de l'environnement).
En esperant que ceci vous aura un petiy peu eclairé...
Sebastien
TOTO="Ceci est un bidule"
export TOTO
si vous etes pressé faites:
export TOTO=Ceci est un bidule"
explication:
Quand on a un shebang du genre
debut prog1
#!/bin/sh
...
fin prog1
un environnement est cree de debut prog1 à fin prog1.
set ou export dans ce programme sera local au programme mais inaccessible de l'extérieur du programme(à cause de l'environnement).
En esperant que ceci vous aura un petiy peu eclairé...
Sebastien
est ce qu'il faudra pas faire une concaténation de ta variable avec read
genre
$varline.=line_in
sinon je vois pas
genre
$varline.=line_in
sinon je vois pas
et est ce que l'autre shell ou ca marche pas n'est pas trop ancien ? Je vois pas trop pourquoi mais bon je cherche des solutions
Ca doit être cela , un problème de version d'os.
je travaille sur SUNOS 5.5.1.
Et en effet j'ai essayé sur une machine hp cela fonctionne.
je travaille sur SUNOS 5.5.1.
Et en effet j'ai essayé sur une machine hp cela fonctionne.
c'est un peu comme le ll qui avant était ls -l sur Linux. J'ai du mal à revenir sur l'ancien Linux au boulot ou le ll marche pas.
c'est bête mon exemple mais comme koi ça évolue tout le temps au niveau des fonctions
c'est bête mon exemple mais comme koi ça évolue tout le temps au niveau des fonctions
En fait, le problème vient du pipe.
f est cahngé en local :
$ f=rien; cat - | while read f; do var=$f; done; echo $f
a
rien
f est changé en globall :
$ f=rien; while read f; do var=$f; done; echo $f
a
a
Maintenant, je ne sais pas non plus comment résoudre le problème, sinon ne pas utiliser de pipe...
=============================
Pour le ll, il s'agit d'un alias préconfiguré ou non. Il suffit d'ajouter au fichier ~/.bashrc la ligne suivante :
alias ll='ls -l'
f est cahngé en local :
$ f=rien; cat - | while read f; do var=$f; done; echo $f
a
rien
f est changé en globall :
$ f=rien; while read f; do var=$f; done; echo $f
a
a
Maintenant, je ne sais pas non plus comment résoudre le problème, sinon ne pas utiliser de pipe...
=============================
Pour le ll, il s'agit d'un alias préconfiguré ou non. Il suffit d'ajouter au fichier ~/.bashrc la ligne suivante :
alias ll='ls -l'
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
23 janv. 2003 à 15:20
23 janv. 2003 à 15:20
Zarbi, j'ai testé chez moi,çàa fonctionne.
[johand@zoot] ~/tmp $i=1 ;while read line_in; do if [ $i -eq 1 ]; then var1="$i.$line_in" ; elif [ $i -eq 2 ]; then var2="$i.$line_in"; fi; i=`expr $i + 1`; done ; echo $var1 $var2
aaa
bbb
1.aaa 2.bbb
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
[johand@zoot] ~/tmp $i=1 ;while read line_in; do if [ $i -eq 1 ]; then var1="$i.$line_in" ; elif [ $i -eq 2 ]; then var2="$i.$line_in"; fi; i=`expr $i + 1`; done ; echo $var1 $var2
aaa
bbb
1.aaa 2.bbb
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
18 janv. 2009 à 12:49
Je ne m'arracherais plus les cheveux grâce à toi ;)
1 nov. 2017 à 15:31
Un grand merci car moi aussi je galérais sur cet histoire de processus enfant et je ne comprenais pas pourquoi ma variable revenait à sa valeur initiale