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

Как отключить сеансы Bash в OS X El Capitan

Похоже, новая функция в OS X El Capitan (10.11 Beta) - это Bash сеансы (сеансы терминала). Теперь у меня есть каталог ~/.bash_sessions с файлами истории, а мои HISTFILE и HISTIGNORE envars переопределяются. Как отключить все эти функции?

4b9b3361

Ответ 1

Это поведение определено в /etc/bashrc_Apple_Terminal. Он содержит комментарии к документации, описывающие, что он делает и как его настроить.

Вы можете отключить функцию истории команд для каждого сеанса, установив SHELL_SESSION_HISTORY=0 в ~/.bashrc script, как описано здесь:

Вы можете отключить это поведение и поделиться одной историей, установив SHELL_SESSION_HISTORY - 0. Есть некоторые общие пользовательские настройки которые позволяют делиться новыми командами между запущенными командами манипулируя историей в каждом приглашении, и они обычно включают 'shopt -s histappend'; поэтому, если опция оболочки histappend включенная, для каждого сеанса история отключена по умолчанию. Вы можете явно включите его, установив SHELL_SESSION_HISTORY в 1.

Обратите внимание, что хотя вы можете отключить весь механизм восстановления состояния сеанса, создав ~/.bash_sessions_disable, нет необходимости просто отключать функцию истории сеанса сеанса и не рекомендуется.

Ответ 2

Если вы запустили новый сеанс Bash вручную (т.е. bash -xl), вы можете увидеть, что запускается при входе в систему.

На выходе вы увидите следующую строку:

....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'

Вы можете создать файл .bash_sessions_disable в своем домашнем каталоге, чтобы отключить эту функцию.

Ответ 3

Подводя итог, это связано с Apple Resume. Когда эта функция включена, когда вы покидаете приложение или перезагружаетесь, при следующем открытии приложения он откроет открытые ранее окна.

Что касается терминалов, для этого должно быть три вещи:

  • $HOME/.bash_sessions_disable должен присутствовать не
  • System Preferences/General/Close Windows when quitting an app должен быть проверен не.
  • При перезагрузке выберите Reopen windows.

При повторном открытии терминала он снова откроет те же окна и вкладки, что и раньше, в тех же самых положениях экрана. Кроме того, если вы отметили Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows, он восстановит текст на каждом экране.

Наконец, и это относится конкретно к вопросу OP, оно восстановит историю в каждом окне/вкладке, если выполняются следующие условия:

  • SHELL_SESSION_HISTORY не установлен или установлен в 1
  • shopt histappend не установлен
  • HISTTIMEFORMAT не установлен

Если SHELL_SESSION_HISTORY явно установлено в 1 в .bashrc, последние два требования переопределены, то есть shopt histappend или HISTTIMEFORMAT могут быть установлены.

Кроме того, следует обратить внимание на переменные HISTSIZE и HISTFILESIZE. Они не должны быть слишком большими или слишком маленькими, а некоторые советуют оставлять их без изменений, поэтому они принимают значения Apple по умолчанию.

Ответ 4

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

Резюме

Когда Bash впервые запускается на MacOS, он сначала запустит /etc/profile, который, в свою очередь, запустит /etc/bashrc. Содержимое этого файла включает следующую строку:

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

$TERM_PROGRAM среды $TERM_PROGRAM устанавливается только приложением Apple Terminal. Печать значения этой переменной возвращает Apple_Terminal. Другими словами, файл /etc/bashrc пытается /etc/bashrc_Apple_Terminal файл /etc/bashrc_Apple_Terminal если он существует и /etc/bashrc_Apple_Terminal для чтения. Именно в этом файле, где MacOS выполняет свою специальную обработку сеанса Bash, чтобы связать ее с функциями возобновления работы ОС.

После всего этого, Bash будет исходить из любых конфигураций, которые пользователь имеет в своем домашнем каталоге (например, ~/.bash_profile или ~/.bashrc). При этом не существует способа переопределить всю работу, выполненную в /etc/bashrc_Apple_Terminal на чисто конфигурационном уровне (как для конфигурации, так и для создания нового файла), не выполняя то, о чем упоминали другие, а именно установив $SHELL_SESSION_HISTORY в 0 чтобы исключить историю сеансов и создать ~/.bash_sessions_disable чтобы предотвратить .bash_sessions каталога .bash_sessions при каждом запуске Apple Terminal.

Ядерный подход

Две возможные альтернативы для устранения любой из этих новых функциональных возможностей MacOS: 1) удалить последнюю строку из файла /etc/bashrc или 2) переименовать или удалить /etc/bashrc_Apple_Terminal во что-то другое.

После этого приложение Apple Terminal перестанет вести себя иначе, чем эмуляторы терминала, не принадлежащие Apple.