Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1682 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] Portée d'une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BASH] Portée d'une variable

n°501226
elrond
Posté le 10-06-2004 à 22:44:14  profilanswer
 

Bonjour
 
J'ai un problème avec la gestion des variables en bash.
Je ne comprend pas pourquoi dans l'exemple ci-dessous, il n'y
a qu'une ligne vide qui s'affiche
 

Code :
  1. #!/bin/bash
  2. function toto ()
  3. {
  4. R="3"
  5. }
  6. function titi()
  7. {
  8. echo "i" | toto
  9. echo $R
  10. }
  11. titi


 
Si quelqu'un pouvait m'éclairer?

mood
Publicité
Posté le 10-06-2004 à 22:44:14  profilanswer
 

n°501253
philou_a7
\_o< coin ! >o_/
Posté le 10-06-2004 à 23:48:30  profilanswer
 

edit: j'avais dit des conneries fausses en shell script, sorry :D


Message édité par philou_a7 le 11-06-2004 à 00:12:29
n°501258
elrond
Posté le 10-06-2004 à 23:56:47  profilanswer
 

c pas vraiment ca, dommage (j'y avais pensé)
mais en bash, les affectations de variables sont globales.
Pour t'en convaincre essaye ca.

Code :
  1. #!/bin/bash
  2. function toto ()
  3. {
  4. R="3"
  5. }
  6. function titi()
  7. {
  8. toto
  9. echo $R
  10. }
  11. titi


 
Mais ce que je comprend pas c pourquoi dans ce cas ca marche, alors que avec un pipe ca ne marche pas  :??:
 
Merci quand même
 
Une autre idée?

n°501260
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 00:14:23  profilanswer
 

bon, effectivement, j'm'a gourré.... la fatigue tout çaaaa :p
 
sinon, je vois pas mais l'appel echo "i" | vers une fonction, c'est bizarre...
tu peu pas faire in=`echo "i"` && toto($in) avec un parametre a ta fonction plutot ?

n°501266
elrond
Posté le 11-06-2004 à 00:17:05  profilanswer
 

Ca arrive ;)
le echo c'était juste pour donner quelque chose au pipe ;)
la fonction toto a besoin de lire dans l'entrée standard
 
en vrai ce n'est pas un echo "i", mais une succession de pipe ;)

n°501270
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 00:22:35  profilanswer
 

bah oui mais envoyer un pipe dans une fonction, j'avoue que ca me chiffonne un peu...
 
c'est pour ca que je te propose de recuperer la sortie de ta serie de | avec les guillemets ` ` et de passer cette valeur à ta fonction a la place de lire stdin

n°501276
elrond
Posté le 11-06-2004 à 00:30:16  profilanswer
 

ca marche très bien les pipe dans les fonctions :)
l'autre méthode je connais, mais en fait j'ai besoin de récupérer des lignes, et l'autre méthode ne conserve pas les lignes :/
 

Code :
  1. $ cat > tmp.txt
  2. une ligne
  3. seconde ligne
  4. troisième ligne
  5. $ a=`more tmp.txt` ; echo $a
  6. une ligne seconde ligne troisième ligne


On voit bien ici que l'on a tout sur une ligne, ce qui ne me conviens pas :( c'est pour ca que j'utilise un pipe

n°501314
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 08:25:27  profilanswer
 

nan... marche pas non plus

n°501316
elrond
Posté le 11-06-2004 à 08:34:16  profilanswer
 

philou_a7 a écrit :

nan... marche pas non plus


J'ai pas compris de quoi tu parles, C'est un copier coller de ma console, donc sa affiche bien ce qui est écrit, mais c'est pas ce que je veux.
 
La vrai fonction toto contient une boucle while read ligne; do; qqchose; done.
C'est pour ca que j'ai besoin du pipe

n°501321
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 08:46:42  profilanswer
 

Euh non, y a eu un autre message entre le tien et le mien mais il a ete effacé :/
 
du coup le mien veux plus rien dire :lol:

mood
Publicité
Posté le 11-06-2004 à 08:46:42  profilanswer
 

n°501322
elrond
Posté le 11-06-2004 à 08:48:02  profilanswer
 

Oui en effet...
 :lol:  :lol:

n°501324
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 09:00:52  profilanswer
 

j'avais peut etre pas totalement dit une connerie au debut...


#!/bin/bash
 
RRR="xxx"
 
function toto ()
{
        RRR="3"
        TT="t"
        echo "RRR dans toto "$RRR
}
 
function tata()
{
        echo "TT dans tata "$TT
        echo "RRR dans tata "$RRR
}
 
function titi()
{
        echo "TT dans titi"$TT
        echo "appel toto" | toto
        echo "RRR dans titi " $RRR
}
 
titi
tata
toto
echo "t" | toto
 
echo "RRR a la fin "$RRR
echo "TT a la fin "$TT


 
essaie ca et regarde bien les resultats
 
je me demande si "local" n'est pas implicite dans une fonction ;)

n°501330
elrond
Posté le 11-06-2004 à 09:09:03  profilanswer
 

Je viens d'avoir l'explication sur le forum gentoo

Citation :

chaque portion d'un pipe est executée dans un sous-shell, et donc les affectations de variable qui s'y trouvent n'ont aucun effet sur le programme principal.


 
http://forums.gentoo.org/viewtopic [...] 23#1230723
 
Ce que je veux faire n'est apparement pas possible, je vais essayer de repenser mon script autrement. Merci pour ton aide

n°501337
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 09:23:39  profilanswer
 

ah bah d'accord :D
et si tu utilises export pour la declaration, ca traverse pas les sous-shells ?

n°501354
elrond
Posté le 11-06-2004 à 10:01:31  profilanswer
 

j'ai déjà essayé, et apparement non

n°501365
philou_a7
\_o< coin ! >o_/
Posté le 11-06-2004 à 10:21:50  profilanswer
 

quand je dis que perl, c'est bien :D

n°501367
elrond
Posté le 11-06-2004 à 10:24:11  profilanswer
 

faudra que j'apprenne un jour... mais un jour qui n'est pas aujourd'hui ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] Portée d'une variable

 

Sujets relatifs
Comment générer des nombres aléatoires sous bash ?MacOS X, Bash et Path...
[ BASH ] Chemin avec accents et espaces problématiques[BASH] KSH : gestion de la date
Suppression lignes d'un fichier |commande bash si possible|Rediriger stderr dans une variable
[bash] Comment dupliquer une redirection ?[BASH] Récupérer le code de retour d'une commande a travers rsh ?
[bash/perl] Faire un graphique[bash] probleme traitement fichier texte
Plus de sujets relatifs à : [BASH] Portée d'une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR