¿Cómo puedo restaurar los cambios en la variable de shell?

¿Cómo puedo restaurar los cambios en la variable de shell?

Con el propósito de un experimento...

Supongamos que hice esto

bash="unset DISPLAY; export DISPLAY"

para que pueda hacer DISPLAYindefinido. ¿Cómo puedo restaurar el valor original establecido? ¿O al menos saber qué era?

Respuesta1

En general lo anotas de antemano.

Si pregunta sobre esto en teoría, simplemente almacene el valor anterior en otro lugar antes de modificarlo y luego vuelva a colocarlo cuando lo desee.

Si preguntas sobre esto porque ahora estás jodido y esperas que haya algo que te saque de apuros, entonces tengo malas noticias para ti...

Respuesta2

No estoy seguro de que haya una manera fácil de hacer esto (como cd -avanzar y retroceder entre cdlos comandos más recientes, por ejemplo)

¿Cuál es el contexto para hacer esto? ¿Quieres que esté disponible automáticamente? No conozco esto como una característica de ningún shell.

Una solución obvia sería guardar explícitamente la variable antes de cambiarla y luego restaurarla. Usando la variable de entorno VENDOR como ejemplo:

$ echo $VENDOR
intel

Guarde el valor original:

$ pre_VENDOR=$VENDOR
$ echo $pre_VENDOR
intel

Asigne un nuevo valor:

$ VENDOR='Zippy'
$ echo $VENDOR
Zippy

Restaurar el valor original:

$ VENDOR=$pre_VENDOR
$ echo $VENDOR
intel

Respuesta3

No puedes, no hay forma de deshacerlo. Guarda el valor en otra variable (o en un archivo o donde quieras) si quieres tenerlo disponible más tarde.

old_DISPLAY=$DISPLAY
unset DISPLAY
DISPLAY=$old_DISPLAY

Si desea ejecutar un solo comando sin la variable de entorno, utilice env.

env -u DISPLAY emacs

También puede usar la sintaxis VAR=VALUE COMMANDpara establecer la variable de entorno VARen el valor especificado solo para este comando.

$ echo $DISPLAY
:0
$ DISPLAY=:1 xterm & # shows the xterm window on display :1
$ echo $DISPLAY
:0

No puedes desarmar una variable de esta manera, pero puedes establecerla en un valor vacío, lo cual suele ser suficiente.

También puede mantener los cambios locales en una subcapa. Los paréntesis delimitan los comandos a ejecutar en un subshell.

$ env | grep -E 'FOO|BAR'
FOO=value_of_FOO
BAR=value_of_BAR
$ (export FOO=other_value; unset BAR; env | grep -E 'FOO|BAR')
FOO=other_value
$ env | grep -E 'FOO|BAR'
FOO=value_of_FOO
BAR=value_of_BAR

Puede ejecutar un shell independiente con un entorno diferente. Escriba exito Ctrl+ Dpara volver al shell principal.

$ bash
$ # change the environment, change directories, etc.
$ exit
$ # now you're back to the parent shell with its environment as you left it

información relacionada