# exportar variable local a ambiente - FINALIZADO -

## ppkombo61

Hola:

Con el comando export puedo convertir una variable local a otra de ambiente, con lo cual al abrir otro terminal tendria que estar disponible.

Si hago por ejemplo export mesa=madera tengo la variable en el shell actual, pero al abrir otra no.

Segun lo que he leido con eso bastaria, pero no me funciona.

¿Donde esta el error?

Gracias.Last edited by ppkombo61 on Wed Sep 11, 2013 12:14 am; edited 1 time in total

----------

## ek balam

 *ppkombo61 wrote:*   

> Hola:
> 
> Con el comando export puedo convertir una variable local a otra de ambiente, con lo cual al abrir otro terminal tendria que estar disponible.
> 
> Si hago por ejemplo export mesa=madera tengo la variable en el shell actual, pero al abrir otra no.
> ...

 

Hola, usando la terminología que usas... cada shell es un ambiente... es decir... al ejecutar... export mesa=madera... haces la variable mesa accesible a otros programas o scripts que corren en el ambiente (shell).

Para hacer que todas tus shells tengan la variable mesa... tendrias que agregar el comando export mesa=madera al archivo ~/.bashrc ó ~/.bash_profile ... según el tipo de login...

o así lo entiendo yo...

Saludos

----------

## agdg

Mientras escribía la respuesta respondió el compañero, de todas formas ya puestos... ahí va:

Cada shell tiene su propio entorno, independiente al de cualquier otro. De hecho puedes modificar las variables de entorno de un shell sin afectar a las de otro shell. Veamoslo con una prueba:

Abrir un shell:

```
agd@agd-desktop ~ $ env | grep TERM

TERM=xterm

COLORTERM=gnome-terminal

agd@agd-desktop ~ $ TERM=test-it

agd@agd-desktop ~ $ env | grep TERM

TERM=test-it

COLORTERM=gnome-terminal
```

Abrir otro shell:

```
agd@agd-desktop ~ $ env | grep TERM

TERM=xterm

COLORTERM=gnome-terminal
```

¿Qué diferencia existe entonces entre una variable local y una global? Las variables locales solo existen en el shell donde se han creado, las variables globales son heredables, es decir, si se invoca un shell hijo este heredará las variables globales del shell padre, pero no las variables locales. Veamoslo con otro ejemplo:

```
agd@agd-desktop ~ $ export x=0

agd@agd-desktop ~ $ y=1

agd@agd-desktop ~ $ echo $x $y

0 1

agd@agd-desktop ~ $ bash

agd@agd-desktop ~ $ echo $x $y

0

agd@agd-desktop ~ $ exit

exit

agd@agd-desktop ~ $ echo $x $y

0 1
```

En los scripts a veces se exportan variables porque se ejecutan procesos en segundo plano que deben tener acceso a variables del script principal.

Si necesitas comunicar algo a otros scripts o shell, usa tuberías; aquí no me enrollo mucho: la tubería se crea, se escribe en ella y permanece en espera a que otro programa lea su contenido. Te dejo con un ejemplo:

```
agd@agd-desktop /tmp $ pipe=/tmp/pipe_1; mkfifo $pipe; for i in $(seq 0 20 100); do echo $i > $pipe & cat $pipe; done

[1] 6606

0

[1]+  Hecho                   echo $i > $pipe

[1] 6608

20

[1]+  Hecho                   echo $i > $pipe

[1] 6610

40

[1]+  Hecho                   echo $i > $pipe

[1] 6612

60

[1]+  Hecho                   echo $i > $pipe

[1] 6614

80

[1]+  Hecho                   echo $i > $pipe

[1] 6616

100

[1]+  Hecho                   echo $i > $pipe

agd@agd-desktop /tmp $
```

----------

