¿Por qué cambiar una variable en un script no la modifica fuera del script?

¿Por qué cambiar una variable en un script no la modifica fuera del script?

Digamos que soy exportuna variable con la terminal. Después de eso, llamo a un script que altera esa variable por otra cosa. Pero cuando vuelvo a la terminal y echoa la variable, permanece en su valor original.

¿Qué puedo hacer si quiero que la variable se cambie y sea visible fuera del script, no solo allí?enla secuencia de comandos. Aquí hay un ejemplo de lo que quiero decir:

ares@ares-HP-ProBook-4530s:~$ export package=tree
ares@ares-HP-ProBook-4530s:~$ cat script3.sh 

#! /bin/bash
#set -x
echo $package
apt-cache show $1 | head -1
if [ $? -eq 0 ]; then
    package=1
else
    package=0
fi
echo $package

Salida al ejecutar el script

ares@ares-HP-ProBook-4530s:~$ ./script3.sh gnome-terminal
tree
Package: gnome-terminal
1
ares@ares-HP-ProBook-4530s:~$ echo $package
tree
ares@ares-HP-ProBook-4530s:~$ 

Respuesta1

Su proceso de shell tiene una copia del entorno principal y no tiene acceso alguno al entorno del proceso principal. Cuando su proceso de shell finaliza, se pierden todos los cambios que haya realizado en su entorno. Obtener un archivo de script es el método más comúnmente utilizado para configurar un entorno de shell; es posible que desee hacer el esfuerzo y mantener uno para cada uno de los dos tipos de shell.

Encontré esta respuestaaquí

Respuesta2

fuente yourfile.sh

Esto debería hacer lo necesario.

Respuesta3

Otra posibilidad es crear una función en su .bashrc y llamar a esa función dentro del shell actual; esto le ahorrará un poco de escritura. Aún puedes pasar variables.

Este es el método que uso en lugar de un alias si necesito un poco más de flexibilidad.

Respuesta4

nuevo proceso obtenerCopiarde cada variable exportada.

Necesitas hacer uno de:

  • realizar todas las operaciones en el mismo proceso (obteniendo el script en el shell actual)
  • mantener el valor en un lugar común (sqlite, archivo plano) y leerlo/escribirlo desde cada proceso

información relacionada