/ / Bash script export / source comportamiento extraño - linux, bash, shell

Bash script exportar / fuente comportamiento extraño - linux, bash, shell

Tengo 2 guiones:

  1. 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"
    
  2. 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 № 1

Porque 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.