Подтвердить что ты не робот

Возможно ли "исправить" в bash?

Я получил script в bash source somescript.sh. Можно ли отменить это без перезапуска терминала? В качестве альтернативы, существует ли способ "reset" оболочки к настройкам, которые он получает при входе без перезапуска?

EDIT: Как было предложено в одном из ответов, мой script устанавливает некоторые переменные среды. Есть ли способ reset для среды входа по умолчанию?

4b9b3361

Ответ 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 для инициализации терминала.