
Con el propósito de un experimento...
Supongamos que hice esto
bash="unset DISPLAY; export DISPLAY"
para que pueda hacer DISPLAY
indefinido. ¿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 cd
los 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 COMMAND
para establecer la variable de entorno VAR
en 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 exit
o 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