Похоже, новая функция в 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.