2015-09-05 4 views
31

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

+1

«... мои ... HISTIGNORE envars переопределены». Вы уверены? '/ etc/bashrc_Apple_Terminal' не изменяет' HISTIGNORE' (на него вообще не ссылаются). –

+1

* Если включена опция оболочки 'histappend', история по каждому сеансу отключена по умолчанию * – yckart

ответ

40

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

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

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

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

+0

Мне нравится иметь доступ к немного больше истории, чем раньше, но налагает ли она какие-либо ограничения на себя? Похоже, у меня есть два или три файла для каждого вызова терминала с момента установки 10.11. Только два мегабайта в месяц, но все же .... – WGroleau

+0

@WGroleau: эта функция не относится к количеству истории, а относится к хранению отдельных командных историй для каждого сеанса терминала, чтобы при восстановлении терминалов с помощью Возобновить истории останутся отдельными Как они были, когда вы изначально создали их. Обычные переменные оболочки HISTSIZE и 'HISTFILESIZE' по-прежнему применяются. На самом деле рекомендуется увеличить один или оба из них, поскольку каждый сеанс также добавляет свою историю в глобальный файл '~/.bash_history', поэтому вся ваша история доступна в новых терминалах. Подробнее см. Комментарии в '/ etc/bashrc_Apple_Terminal'. –

+0

@WGroleau: он также автоматически удаляет файлы сеанса старше двух недель, один раз в день. –

22

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

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

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

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

+1

Приятная находка! Рассмотрение '/ etc/bashrc_Apple_Terminal', хотя приводит меня к мысли, что единственным способом предотвратить эту функцию в целом является установка« $ HOME/.bash_sessions_disable »' (то есть без этого файла она все равно будет создавать каталог сеансов). – Whymarrh

+0

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

+1

Похоже, я неправильно понял, что последняя строка, да. Извини за это. – Whymarrh

6

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

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

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

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

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

  1. SHELL_SESSION_HISTORY не установлен или установлен в 1
  2. shopt histappend не набор
  3. HISTTIMEFORMAT не установлен

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

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

Смежные вопросы