
В целях эксперимента...
Предположим, я сделал это.
bash="unset DISPLAY; export DISPLAY"
так что я могу сделать DISPLAY
undefined. Как мне восстановить исходный набор значений? Или хотя бы узнать, каким он был?
решение1
Как правило, вы записываете это заранее.
Если вы спрашиваете об этом теоретически, то вы просто сохраняете старое значение где-то в другом месте перед его изменением, а затем возвращаете его обратно, когда захотите.
Если вы спрашиваете об этом, потому что сейчас вы влипли и надеетесь, что есть что-то, что вас выручит, то у меня для вас плохие новости...
решение2
Я не уверен, что есть простой способ сделать это (например, cd -
перемещаться вперед и назад между последними cd
командами).
В каком контексте это делается... вы хотите, чтобы это было доступно автоматически? Я не знаю об этом как о функции какой-либо оболочки.
Одним из очевидных решений было бы явно сохранить переменную перед ее изменением, а затем восстановить ее позже. Используя переменную окружения 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
Таким образом нельзя сбросить значение переменной, но можно присвоить ей пустое значение, что часто бывает достаточно.
Вы также можете сохранять изменения локально для подоболочки. Скобки разделяют команды для выполнения в подоболочке.
$ 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
Вы можете запустить отдельную оболочку с другой средой. Введите exit
или Ctrl+ D, чтобы вернуться в родительскую оболочку.
$ bash
$ # change the environment, change directories, etc.
$ exit
$ # now you're back to the parent shell with its environment as you left it