Une copie de l'environnement se propage aux sous-shells, donc cela fonctionne:
$ export MY_VAR=200
$ bash
$ echo $MY_VAR
200
mais comme il s'agit d'une copie, vous ne pouvez pas obtenir cette valeur jusqu'au shell parent - pas en changeant l'environnement, au moins.
Il semble que vous vouliez réellement aller plus loin, c'est-à-dire créer quelque chose qui agit comme une variable globale, partagée par des shells "frères" initiés séparément du parent - comme votre nouvel onglet dans Gnome Terminal.
Généralement, la réponse est "vous ne pouvez pas, car les variables d'environnement ne fonctionnent pas de cette façon". Cependant, il y a une autre réponse, qui est, eh bien, vous pouvez toujours pirater quelque chose. Une approche consisterait à écrire la valeur de la variable dans un fichier, comme ~/.myvar
, puis à l'inclure dans ~/.bashrc
. Ensuite, chaque nouveau shell commencera avec la valeur lue dans ce fichier.
Vous pourriez aller plus loin - faites ~/.myvar
être au format MYVAR=200
, puis définissez PROMPT_COMMAND=source ~/.myvar
, ce qui entraînerait la relecture de la valeur chaque fois que vous obtenez une nouvelle invite. Ce n'est pas encore tout à fait une variable globale partagée, mais ça commence à agir comme ça. Il ne s'activera pas jusqu'à ce qu'une invite revienne, ce qui, selon ce que vous essayez de faire, pourrait être une sérieuse limitation.
Et puis, bien sûr, la prochaine chose est d' écrire automatiquement les modifications ~/.myvar
. Cela devient un peu plus compliqué, et je vais m'arrêter ici, car vraiment, les variables d'environnement n'étaient pas censées être un mécanisme de communication inter-shell, et il vaut mieux trouver simplement une autre façon de le faire.