Tengo 2 guiones:
guión: script1.sh
#!/bin/bash [[ $0 = "$BASH_SOURCE" ]] && { echo "You must source me!"; exit; } if [ -z ${I} ]; then echo echo -n "some string: " stty -echo read I #export I stty echo echo else echo "ALREADY SET!!!" fi echo "--- $I"
guión: script2.sh
#!/bin/bash echo "--- $I" if [ -z $I ]; then echo "VARIABLE NOT SET" else echo "VARIABLE SET" fi
Y ahora la parte que me confundió ... Primero ejecuto script1 y luego script2 ...
Primer escenario:
Como puede ver, puedo imprimir la variable $ I (valor: asd) dentro de script1. Cuando ejecuto script2 devuelve "VARIABLE NOT SET", pero cuando trato de hacer eco de $ I aparece "asd"
wolfy@VMtest:~$ . ./script1.sh
some string:
--- asd
wolfy@VMtest:~$ ./script2.sh
---
VARIABLE NOT SET
wolfy@VMtest:~$ echo $I
asd
wolfy@VMtest:~$
Segundo escenario:
Ahora lo descomento #export I
y vuelva a ejecutar ambos scripts como antes (antes de volver a ejecutar creé una nueva sesión para que todas las variables se restablezcan)
En este caso, puedo leer $ I en script2 y repetirlo
wolfy@VMtest:~$ . ./script1.sh
some string:
--- asd
wolfy@VMtest:~$ ./script2.sh
--- asd
VARIABLE SET
wolfy@VMtest:~$ echo $I
asd
¿Puede alguien explicarme por qué en mi primer escenario puedo hacer eco de $ I, pero no puedo usarlo en el segundo script?
Respuestas
2 para la respuesta № 1Porque no lo "exportó". La exportación de una variable la mueve de la lista de variables del shell actual al entorno. Los subprocesos solo leen variables existentes del entorno.