67 votes

Variable d'environnement vs variable Shell, quelle est la différence ?

Quelqu'un m'a dit ça :

BASH n'est pas une variable d'environnement, c'est une variable Shell.

Quelle est la différence ?

57voto

Lekensteyn Points 162346

Une variable d'environnement est une variable disponible globalement, dans un programme et ses programmes fils. Une variable Shell n'est disponible que dans le Shell actuel. Pour rendre une variable Shell disponible comme variable d'environnement, utilisez export VARNAME (sans dollar $ ).

Exemples à titre de clarification :

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

Une autre façon de définir une variable d'environnement :

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE

42voto

Takkat Points 135194

$BASHvariable locale qui n'est valable que dans le Shell actuel (bash).

Variables d'environnement comme $SHELL sont valables dans tout le système. Dans un Shell Bash courant, $BASH pointe vers le chemin d'exécution de bash alors que $SHELL pointe vers le Shell défini par défaut (qui peut avoir la même valeur).

Pour une explication des variables d'environnement, voir Variables d'environnement dans l'aide Ubuntu.

9voto

Peter Hilton Points 10580

Il y a une différence. Shell et variables d'environnement l'expliquera mieux que moi, mais en voici un extrait :

Si une modification est apportée à une variable Shell, elle doit être explicitement "exportée" vers la variable d'environnement correspondante pour que tous les sous-processus bifurqués voient la modification. Rappelons que les variables Shell sont locales à la Shell dans laquelle elles ont été définies.

3voto

Ashish Points 69

Shell : Court terme, Appliqué uniquement à l'instance actuelle du Shell, Non applicable à l'ensemble du système.

Variable environnementale : Utilisation à long terme, valable pour l'ensemble du système, autorisé globalement.

Par convention, les variables Shell ont leur nom en minuscule alors que les variables Envn. Les variables sont écrites en majuscules

0voto

Vishrant Points 411

Pour répondre à cette question, essayez d'abord de comprendre la portée d'une variable.

Lorsque vous créez une nouvelle variable comme SOME_ENV_VARIABLE="testing.txt" il réside dans le SHELL scope ce qui signifie que l'on peut y accéder par cette instance de Shell où l'utilisateur est connecté. Lorsque l'instance change, par exemple, vous ouvrez un nouveau terminal ou vous changez le Shell (par exemple, vous passez à l'option csh ) vous ne pouvez pas accéder à cette variable.

Lorsque vous exportez cette variable comme export SOME_ENV_VARIABLE cette variable est maintenant disponible dans la portée de l'environnement, ce qui signifie dans cette instance si vous changez le Shell vous pouvez toujours accéder à cette variable. Essayons de comprendre à l'aide de l'exemple suivant :

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

Analogie : supposons que vous ayez un appartement de deux chambres et que vous le partagiez avec un autre colocataire. La zone commune peut être accédée par n'importe qui mais pas vos chambres à coucher, la variable d'environnement est comme la zone commune et la variable Shell est comme la chambre à coucher, si vous laissez quelque chose dans la zone commune il peut être accédé par n'importe qui mais si vous le gardez dans votre chambre à coucher il peut seulement être accédé par vous.

Rappelez-vous que si vous ouvrez un nouveau terminal, vous ne pourrez pas accéder à l'une ou l'autre des variables car vous changez de terminal. cette instance . Pour cela, vous devez ajouter vos variables soit dans .profile o .bashrc (si vous utilisez bash).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X