rss
Visibilite des variables dans un shell
par Haiti
 Fil de Discussions
Statut : Non résolu
jeudi 23 janvier 2003 à 14:19:03
Hallu,

J'ai remarqué qu'en Bourne Shell sous unix lorsque je set une variable dans un bloc comme while [ ] -do- ... -done , cette variable n'est pas visible en dehors du bloc. Alors que cela fonctionne dans un if ou un boucle for .
Qui a une idée du pourquoi et comment trouver une solution pour rendre visible ma variable dans le reste de mon shell ???
Répondre à Haiti  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lasngc, le jeudi 23 janvier 2003 à 14:25:01 Fil de Discussions
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
Répondre à lasngc

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Haiti, le jeudi 23 janvier 2003 à 14:43:09 Fil de Discussions
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.
Répondre à Haiti

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lasngc, le jeudi 23 janvier 2003 à 14:45:51 Fil de Discussions
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.
Répondre à lasngc

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Haiti, le jeudi 23 janvier 2003 à 14:55:51 Fil de Discussions
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.
Répondre à Haiti

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lasngc, le jeudi 23 janvier 2003 à 15:10:02 Fil de Discussions
est ce qu'il faudra pas faire une concaténation de ta variable avec read

genre

$varline.=line_in

sinon je vois pas
Répondre à lasngc

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par jisisv, le jeudi 23 janvier 2003 à 15:20:03 Fil de Discussions
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.
Répondre à jisisv

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lasngc, le jeudi 23 janvier 2003 à 15:22:33 Fil de Discussions
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
Répondre à lasngc

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Haiti, le jeudi 23 janvier 2003 à 15:44:31 Fil de Discussions
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.
Répondre à Haiti

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lasngc, le jeudi 23 janvier 2003 à 16:10:17 Fil de Discussions
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
Répondre à lasngc

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Anc, le jeudi 22 novembre 2007 à 12:10:48 Fil de Discussions
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'
Répondre à Anc

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Anc, le jeudi 22 novembre 2007 à 12:14:12 Fil de Discussions
Corrections, il faut remplacer les 'f' de début et de fin par var (ça m'apprendra à ne pas vérifier avant d'envoyer) :

$ var=rien; cat - | while read f; do var=$f; done; echo $var

et

$ var=rien; while read f; do var=$f; done; echo $var
Répondre à Anc

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Tof, le mardi 27 novembre 2007 à 10:54:42 Fil de Discussions
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
Répondre à Tof

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Tof, le mardi 27 novembre 2007 à 11:02:37 Fil de Discussions 
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
Répondre à Tof
Discussions pertinentes trouvées dans le forum
04/03 11h14creation d'une variable shellLinux/Unix06/03 14h392
29/06 10h56Format de variables ShellLinux/Unix29/06 16h388
16/05 10h44[Shell] Problème avec une variable [Débutant]Linux/Unix16/05 10h554
27/03 15h02script shell : recherche char dans variableLinux/Unix02/05 20h598
Plus de discussions sur « Visibilite des variables dans un shell » Discussion en cours Discussion fermée Problème résolu
Logiciels pertinents trouvés dans les téléchargements
Télécharger SSH Secure Shell 3.0 build 203SSH Secure Shell - SSH secure shell for workstations est un client SSH flexible permettant de se connecter de façon sécurisée à des...Catégorie: Telnet/SSH
Licence: Open Source
Télécharger ShellEnhancer  3.0.0.91ShellEnhancer - ShellEnchancer est un programme d'amélioration des fonctions de base de Windows. Il rend les interfaces plus stables et plus...Catégorie: Personnalisation
Licence: Freeware/gratuit
Télécharger Gant2Ocean ShellPack    2Gant2Ocean ShellPack - Pour ceux qui aiment bien personnaliser l'apparence de leur interface graphique Windows ou Thèmes, ils seront gâtés. ...Catégorie: Personnalisation
Licence: Freeware/gratuit
Télécharger CygWin 1.5.24-2CygWin - Cygwin est un environnement UNIX pour Windows composé: d'un shell Unix d'une librairie dynamique (DLL) chargée de...Catégorie: Développement
Licence: Open Source
Plus de logiciels gratuits sur « Visibilite des variables dans un shell »
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide