Linux en Espanol
 
Llamado a variables en otro archivo (tema #24991)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
igorov
Forista
Registrado: 2014-05-06
Mensajes: 3

Publicado: 2014-05-06 00:51:24    Asunto: Llamado a variables en otro archivo

Hola a todos, estoy haciendo un script sh y tengo que importar unas variables de otro archivo, pero tengo problemas al importar, no reconocen las variables, por ejemplo mi script es:

[code:1:52814b8747]
#!/bin/sh
./dirvar/.varset

echo $MIVARIABLE[/code:1:52814b8747]

y mi archivo .varset seria:
[code:1:52814b8747]
MIVARIABLE=/etc/lugar

export MIVARIABLE[/code:1:52814b8747]

Pero cuando hago echo $MIVARIABLE no me muestra nada, el directorio donde esta .varset esta en el lugar correcto, la carpeta dirvar. Les agradezco de antemano la ayuda.
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2014-05-07 20:26:25    Asunto: Re: Llamado a variables en otro archivo

Hola.[quote:8c50a74618="igorov"]
[code:1:8c50a74618]
#!/bin/sh
./dirvar/.varset

echo $MIVARIABLE[/code:1:8c50a74618]
[/quote:8c50a74618]
Si ejecutas un script dentro de otro, llam?ndolo por su nombre como has hecho, la llamada al segundo crea una nueva instancia de bash, crea las variables all? y al acabar destruye esa instancia de bash y por tanto tus variables.
La soluci?n es hacer la llamada como un "include". Eso en bash se hace con un "." (punto) as?:
#!/bin/sh
. ./dirvar/.varset

echo $MIVARIABLE[/code]
N?tese que es "." "espacio" "./dirvar/.varset"

Es decir as?:
[code:1:8c50a74618]usu@sabayon /tmp $ cat uno.sh
#!/bin/bash
VARIABLE=principal
echo "Antes de llamar al segundo: $VARIABLE"
echo Entro en segundo script
. ./dos.sh
echo Salgo de segundo script
echo "Despu?s de llamar al segundo: $VARIABLE"

usu@sabayon /tmp $ cat dos.sh
echo "Desde dentro del segundo antes de cambiar: "$VARIABLE
VARIABLE=Secundario
echo "Desde dentro del segundo despu?s de cambiar: "$VARIABLE

usu@sabayon /tmp $ ./uno.sh
Antes de llamar al segundo: principal
Entro en segundo script
Desde dentro del segundo antes de cambiar: principal
Desde dentro del segundo despu?s de cambiar: Secundario
Salgo de segundo script
Despu?s de llamar al segundo: Secundario
usu@sabayon /tmp $
[/code:1:8c50a74618]

Saludos.





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries