Возможно ли "исправить" в bash?
Я получил script в bash source somescript.sh
. Можно ли отменить это без перезапуска терминала? В качестве альтернативы, существует ли способ "reset" оболочки к настройкам, которые он получает при входе без перезапуска?
EDIT: Как было предложено в одном из ответов, мой script устанавливает некоторые переменные среды. Есть ли способ reset для среды входа по умолчанию?
Ответы
Ответ 1
Лучшим вариантом является использование unset
, чтобы отключить переменные среды, которые производит источник. Добавление OLD_PATH=$PATH; export OLD_PATH
в профиль .bashrc
сохраняет резервную копию пути входа в систему, если нужно вернуть $PATH
.
Ответ 2
Обычно достаточно просто перезапустить оболочку:
$ exec bash
Это не гарантируется, чтобы отменить что-либо (поиск script может удалить файлы или выполнить произвольную команду), но если ваши сценарии настройки хорошо написаны, вы получите относительно чистую среду. Вы также можете попробовать:
$ su - $(whoami)
Обратите внимание, что оба этих решения предполагают, что вы говорите об перезагрузке текущей оболочки, а не о вашем терминале как (неверно?), указанном в вопросе. Если вы хотите reset терминала, попробуйте
$ reset
Ответ 3
Нет. Поиск script выполняет команды, содержащиеся в нем. Нет гарантии, что script не выполняет действия, которые нельзя отменить (например, удалить файлы или что-то еще).
Если script устанавливает только некоторые переменные и/или запускает некоторые безобидные команды, вы можете "отменить" его действие, отключив одни и те же переменные, но даже тогда script может заменить переменные, которые уже имели значения до с новыми, и чтобы отменить его, вы должны были бы помнить, какие старые значения были.
Если вы создаете script, который устанавливает некоторые переменные для вашей среды, но вы хотите, чтобы это было отменено, я предлагаю вам сначала запустить новую (под) оболочку и указать script в подоболочке. Затем в reset среду, до которой она была раньше, просто выйдите из подоболочки.
Ответ 4
Не самое элегантное решение, но, похоже, оно делает то, что вы хотите:
exec $SHELL -l
Ответ 5
Я не думаю, что отменить выполненные команды возможно в bash. Вы можете попробовать tset, reset
для инициализации терминала.