Я оглянулся и нашел ответ на этот вопрос, но, похоже, я его не нашел (что странно).
Мой вопрос, есть ли простой способ перезапустить сеанс Bash из терминала на Mac. Мне просто нужно такое же поведение, как если бы я закрыл приложение терминала и снова запустил его (сброс всех переменных, получение источника .bash_profile и т. Д.).
Я знаю, как получить исходный код .bash_profile, но это не то, что я хочу. Одна из причин, по которой я хочу это сделать, заключается в том, что плагин для моей подсказки bash содержит код, который предотвращает многократную загрузку цветов. Поэтому sourcing .bash_profile не перезагружает переменные цвета, и мне нужно перезапустить терминальное приложение, чтобы изменения вступили в силу.
exec bash
перезапускает эту интерактивную оболочку только тогда? Кроме того, можете ли вы объяснить, что именно выполняет команда exec и ее параметры? Благодарность!man bash
, найдите последний экземпляр строки SHELL BUILTIN COMMANDS, а затем прокрутите вниз до exec. Короче говоря, передача-c
флага запускает его без каких-либо переменных среды (которые могут потребоваться для ваших целей, я не знаю), а другие аргументы -l и -a, вероятно, не те вещи, которые вы хотите (они кажутся историческими / непонятные и специфические особенности). Вы также можете использовать exec для открытия новых файловых дескрипторов в текущей оболочке, если вы не указали команду.-l
здесь аргумент bash и просто заставляет его вести себя как оболочка входа в систему. Открытие файловых дескрипторов в текущей оболочке не имеет ничего общего с вашим вопросом, но вы можете использовать,exec 4<>test.txt
например, чтобы дескриптор файла 4 указывал на test.txt. Затем в остальной части вашей оболочки вы можете сделатьecho test>&4
вывод в test.txt.Принятый ответ отлично подходит для оболочки, использующей bash, что также и было задано OP, однако я использую Terminal на macOS с оболочкой не по умолчанию (zsh), и выполнение команды,
exec bash
очевидно, не дает желаемого эффекта : он запускает bash вместо моей оболочки по умолчанию.Таким образом, команда environment-agnostic будет
exec $SHELL
использовать переменную окружения,$SHELL
которая хранит оболочку по умолчанию для пользователя.Кроме того, обратите внимание, что Apple заменит bash на zsh в macOS Catalina, чтобы получить эффект, который ищет OP либо,
exec zsh
либоexec $SHELL
это будет путь после обновления до macOS 10.15.источник