2012-05-28 13 views
25

Tengo dos scripts 1.sh y 2.sh.exportación no funciona en mi script de shell

1.sh es el siguiente:

#!/bin/sh 
variable="thisisit" 
export variable 

2.sh es el siguiente:

#!/bin/sh 
echo $variable 

Según lo que he leído, haciendo así (exportación) puede acceder a las variables en una sola script de shell de otro. Pero esto no está funcionando en mis guiones. ¿Alguien puede ayudarme? Gracias por adelantado.

+0

y cómo está ejecutando estos scripts de shell? – linuxeasy

+0

vea también: http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip#176788 y http: // unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b – lesmana

+0

Primero ejecuto 1.sh en el terminal, luego ejecuto 2.sh en el mismo terminal. .. – Xander

Respuesta

5

export pone una variable en el entorno del intérprete de ejecución, por lo que se pasa a los procesos ejecutados por el guión, pero no al proceso que invoca el guión o cualquier otro proceso. Intente ejecutar

#!/bin/sh 
FOO=bar 
env | grep '^FOO=' 

y

#!/bin/sh 
FOO=bar 
export FOO 
env | grep '^FOO=' 

para ver el efecto de export.

Para obtener la variable de 1.sh a 2.sh, o bien llamar 2.sh de 1.sh, o importar 1.sh en 2.sh:

#!/bin/sh 
. ./1.sh 
echo $variable 
59

Si está ejecutando sus archivos como sh 1.sh o ./1.sh Entonces se está ejecutando en un sub -cáscara.

Si desea que los cambios a realizar en su shell actual, se podría hacer:

. 1.sh 
# OR 
source 1.sh 

Por favor, considere ir a través de la reference-documentation.

"Cuando una secuencia de comandos se ejecuta utilizando source [o .] que se ejecuta dentro de la cubierta existente, cualquier variable creados o modificados por el guión estando disponible después de que el script. Por el contrario, si la secuencia de comandos se ejecuta tan pronto como filename , luego se crearía una subshell separada (con un conjunto de variables completamente separadas) para ejecutar el script ".

+0

El OP está utilizando '/ bin/sh', que en muchas plataformas es un shell POSIX mínimo y no admite el comando' source'. –

+0

hmmm .. He mencionado sobre '.' y' space'. He mencionado 'fuente' ya que eso es lo que veo que la gente usa hoy en día. – linuxeasy

+0

1.sh: 3: fuente: no encontrado :( No quiero que mi 1.sh se ejecute desde 2.sh, quiero ejecutar 1.sh primero, después de cerrarlo ejecute 2.sh .. y Acceda a la variable en el primero desde el segundo ... Gracias por las respuestas – Xander