
為了實驗的目的...
假設我這樣做了
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