Как восстановить изменения в переменной оболочки?

В целях эксперимента …

Предположим, я сделал это

bash="unset DISPLAY; export DISPLAY" 

поэтому я могу сделать DISPLAY неопределенным. Как восстановить исходное значение? Или, по крайней мере, знать, что это было?

3 Solutions collect form web for “Как восстановить изменения в переменной оболочки?”

В общем, вы пишете его перед рукой.

Если вы спрашиваете об этом в теории, тогда вы просто храните прежнее значение где-то еще, прежде чем модифицировать его, а затем верните его, когда захотите.

Если вы спрашиваете об этом, потому что теперь вы ввернуты и надеетесь, что есть что-то, что вас выручит, тогда у меня плохие новости для вас …

Я не уверен, что есть простой способ сделать это (например, cd - перемещаться вперед и назад между последними командами cd например)

Каков контекст этого. Вы хотите, чтобы это было доступно автоматически? Я не знаю об этом как об объекте любой оболочки.

Одним из очевидных решений было бы явное сохранение переменной до ее изменения, а затем ее восстановление. Использование переменной окружения VENDOR в качестве примера:

 $ echo $VENDOR intel 

Сохраните исходное значение:

 $ pre_VENDOR=$VENDOR $ echo $pre_VENDOR intel 

Назначьте новое значение:

 $ VENDOR='Zippy' $ echo $VENDOR Zippy 

Восстановить исходное значение:

 $ VENDOR=$pre_VENDOR $ echo $VENDOR intel 

Вы не можете, нет отмены. Сохраните значение в другой переменной (или в файле или где угодно), если вы хотите, чтобы он был доступен позже.

 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 
  • Переменная Shell variable vs. Environment, какая из них предпочтительна, если оба имеют одно и то же имя?
  • Можно ли получить внешние переменные среды для измененной среды?
  • Makefile make install не выполняет несколько строк
  • Запустить сценарий в неинтерактивной оболочке?
  • Почему экспорт не влияет на дочерние оболочки?
  • Каковы основные различия между $ ENV_VAR и `env_var`?
  • Защита ресурсов от воздействия
  • Разница между переменными среды и экспортированными переменными среды в bash
  • Косвенно развернуть переменные в оболочке
  • почему нам здесь не нужен экспорт?
  • Кто настраивает http_proxy?
  • Interesting Posts

    Создайте RPM для конкретной незначительной версии RH

    Почему перехват системных вызовов дает разные результаты каждый раз в Linux / Android 2.6.29?

    Как эмулировать сеть Windows для `ntlm_auth`?

    Как установить беспроводные драйверы для Debian 8 на MacBook Pro 8,2

    Ввод m файлов в каталог в n tar-файлов по размеру?

    Измерение свободного прохода / proc / meminfo с помощью ramdisk (initrd)

    Калибровать сенсорный экран

    XKB многомачтовая компоновка специфическая странность поведения Capslock

    Отсутствие Ubuntu в меню загрузки после установки Cent OS 6

    путают об использовании udevadm

    Исправить разделение разделов во FreeBSD

    Ли Linux использует файлы устройств для разделов жесткого диска для доступа к жесткому диску?

    Почему расширение файла работает для имен файлов с символом новой строки?

    В какой библиотеке Linux находятся системные вызовы и как эта библиотека связана с исполняемым объектным файлом, который содержит системные вызовы?

    В чем разница между .exrc и .vimrc?

    Linux и Unix - лучшая ОС в мире.