Как сбросить среду оболочки?

25

Эта проблема беспокоила меня некоторое время, и хотя я думал, что нашел свой ответ через EnvWatcher , к сожалению, он работает только на Bash. И я использую Zsh.

Я хотел бы повторить то, что делает env-watcher, в меньшей степени, может быть, но мне нужно знать, есть ли команда, с помощью которой я мог бы сбросить оболочку до стадии чистого запуска.

Как например, я хотел бы иметь следующий рабочий процесс.

source some-functions
alias another-thing
export SVN_EDITOR=vim
RESET-ZSH # none of the above are valid any more

Есть ли такая встроенная возможность, или я гоняюсь за бабочками?

mhitza
источник

Ответы:

32

Вы можете просто exec zsh, что даст вам свежий Zsh и перезапустить функции инициализации. Обратите внимание, что exec zsh -lдля входа в систему zsh необходимо сохранить статус «оболочка входа». Я не знаю, насколько хорошо он сохраняет историю команд (мне кажется, это работает, но если вы используете несколько оболочек в разных терминалах, вы можете получить «перекрестные помехи» между историей двух оболочек)

Random832
источник
4
Это не отменит экспортированные переменные окружения, не так ли? (Хотя все, что установлено вашим файлом инициализации, будет сброшено.)
cjm
Вероятно, это не так. Я не рассматривал этот аспект, потому что я не думал о переменных среды как о чем-то, что вы временно устанавливаете в оболочке.
Random832
15

Чтобы отменить экспортированные переменные среды, вы можете использовать envкоманду env -i zsh. envзапускает команду, заданную в качестве аргумента, и -iдает ей чистую среду.

В зависимости от конфигурации, возможно , потребуется добавить -lк zsh /  bashдля того , чтобы загрузить ваши .profile, и вы также , возможно , потребуются «бутстрап» среда с , $HOMEтак что оболочка знает , где найти файлы запуск. В целом это выглядит так:

env -i HOME="$HOME" zsh -l
Крис
источник
1
Вам может понадобиться несколько других, как TERMи DISPLAY.
G-Man говорит «Восстановить Монику»