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