如何恢复对 shell 变量的更改?

如何恢复对 shell 变量的更改?

为了实验的目的...

假设我这样做了

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。键入exitCtrl+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

相关内容