IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Variables locales et variables d'environnement


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Par défaut Variables locales et variables d'environnement
    Bonjour
    j'ai du mal à faire la différence entre
    * variables locales du shell
    * variables d'environnement

    Je lis ce qui suit dans WIKIPEDIA

    Sous Unix et Linux, les shells utilisent deux types de variables, utilisant la même syntaxe :

    * Des variables locales au shell,
    * Des variables d'environnement transmises aux applications lancées par le shell.

    Ces dernières sont accédées comme des variables locales et doivent être exportées avec la commande export (pour bash), ou utiliser la commande setenv (csh)
    Je fais le test suivant dans une fenêtre terminal de mon environnement graphique dans RHEL 5.3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [dom@vnilux ~]$ TEST_VAR="toto"
    [dom@vnilux ~]$ echo $TEST_VAR
    toto
    [dom@vnilux ~]$
    TEST_VAR est une variable locale du terminal (du shell en cours). Si je ferme le terminal par exit, et que j'ouvre à nouveau le terminal, TEST_VAR n'est plus définie; pour moi donc, c'est (c'était) une variable locale au shell

    Je fais le test suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [dom@vnilux ~]$ TEST_VAR="toto"
    [dom@vnilux ~]$ echo $TEST_VAR
    toto
    [dom@vnilux ~]$ export TEST_VAR
    [dom@vnilux ~]$
    Je ne vois pas la différence qu'apporte la commande export; la variable TEST_VAR reste une variable "temporaire" du shell (qui n'est plus définie si on ferme et qu'on ré-ouvre un nouveau terminal), puisque l'export n'a pas été fait en dur dans les fichiers de configuration.
    Est ce que le fait de faire la commande export a transformé la variable locale TEST_VAR en variable d'environnement ? si c'est le cas, je ne vois pas concrètement ce que cela apporte de plus

    Merci par avance des réponses

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    une variable issue d'un fichier charge sera une variable permanante tout autre déclaration est une variable locale du shell en cours.
    utiliser ou pas export c'est surtout dépendant du shell utilisé (ksh,sh,csh,etc...) et du type de contenu de la variable.

  3. #3
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Tu prends le problème à l'envers La variable exportée sera passée aux fils de ton shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ TEST_VAR="toto"
    $ echo $TEST_VAR
    toto
    $ bash
    $ echo $TEST_VAR
     
    $ exit
    Ici, j'ai fait une variable TEST_VAR sans export : en ouvrant un nouveau process (par exemple, un nouveau shell bash), la variable n'est plus connue...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ export TEST_VAR="toto"
    $ echo $TEST_VAR
    toto
    $ bash
    $ echo $TEST_VAR
    toto
    $ exit
    Dans ce deuxième exemple, j'ai utilisé export pour la variable TEST_VAR : en ouvrant un nouveau process (par exemple, un nouveau shell bash), la variable est bien connue !

    Edit: pour être plus clair, un exemple plus concret
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat > exp.sh
    #!/bin/sh
    echo "TEST_VAR="$TEST_VAR
    $ chmod +x exp.sh
    $ TEST_VAR="toto"
    $ echo $TEST_VAR
    toto
    $ ./exp.sh
    TEST_VAR=
    $ export TEST_VAR="toto"
    $ ./exp.sh
    TEST_VAR=toto
    Tu vois bien que dans le premier exemple, ton script exp.sh ne connait pas la variable TEST_VAR alors que lors du second passage, il l'affiche correctement car elle a été exportée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 15h44
  2. Réponses: 7
    Dernier message: 15/11/2007, 14h41
  3. [NASM][Pile] Sauvegarder variable locale dans variable passée en paramètre
    Par homeostasie dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 20/01/2007, 09h48
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 09/11/2005, 23h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo