
Digamos que soy export
una 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 echo
a 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