为了实验的目的...
假设我这样做了
bash="unset DISPLAY; export DISPLAY"
所以我可以使DISPLAY
未定义。如何恢复原来设置的值?或者至少知道那是什么?
答案1
一般来说,你事先把它写下来。
如果您在理论上询问这个问题,那么您只需在修改旧值之前将其存储在其他地方,然后在需要时将其放回去即可。
如果你问这个问题是因为你现在被搞砸了,希望有什么东西可以拯救你,那么我有坏消息要告诉你......
答案2
我不确定是否有一种简单的方法可以做到这一点(例如cd -
在最近的命令之间来回移动)cd
这样做的背景是什么..您希望它自动可用吗?我不知道这是任何 shell 的功能。
一种明显的解决方案是在更改变量之前显式保存变量,然后再恢复它。以 VENDOR 环境变量为例:
$ echo $VENDOR
intel
保存原始值:
$ pre_VENDOR=$VENDOR
$ echo $pre_VENDOR
intel
分配一个新值:
$ VENDOR='Zippy'
$ echo $VENDOR
Zippy
恢复原来的值:
$ VENDOR=$pre_VENDOR
$ echo $VENDOR
intel
答案3
你不能,没有撤消的余地。如果您想稍后使用该值,请将其保存在另一个变量中(或在文件中或您喜欢的任何位置)。
old_DISPLAY=$DISPLAY
unset DISPLAY
…
DISPLAY=$old_DISPLAY
如果您想在没有环境变量的情况下运行单个命令,请使用env
.
env -u DISPLAY emacs
您还可以使用语法VAR=VALUE COMMAND
将环境变量设置VAR
为仅针对该命令的指定值。
$ echo $DISPLAY
:0
$ DISPLAY=:1 xterm & # shows the xterm window on display :1
$ echo $DISPLAY
:0
您不能以这种方式取消设置变量,但可以将其设置为空值,这通常就足够了。
您还可以将更改保留在子 shell 本地。括号分隔要在子 shell 中执行的命令。
$ 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
您可以在不同的环境中运行单独的 shell。键入exit
或Ctrl+D以返回到父 shell。
$ bash
$ # change the environment, change directories, etc.
$ exit
$ # now you're back to the parent shell with its environment as you left it