Как я могу заставить Терминал вести отдельную историю для каждой вкладки / окна?


13

Когда я перезагружаю свой Mac, он закрывает и сохраняет буферы для каждой вкладки должным образом, поскольку он снова появляется, когда компьютер запускается снова. Но история команд не буферизуется должным образом для каждого окна / вкладки. Они все один и тот же буфер.

Я предполагаю, что это потому, что bash использует то же самое ~/.bash_historyдля всех терминалов, но есть ли способ избежать этого? Чтобы сделать bash или, может быть, Terminal, хранить их отдельно?


Пожалуйста, смотрите этот пост @ Ошибка сервера, он объясняет, как это сделать.
Мутант

Ответы:


7

Вы можете сделать что-то подобное в вашем .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Это создаст отдельные файлы истории в вашем домашнем каталоге, такие как .bash_history_ttys002. Когда вы создаете новое окно терминала, оно будет использовать файл истории, соответствующий имени tty, который обычно определяется просто порядком, в котором вы создаете окна терминала.


Большое спасибо! Маркировка это как решено. Хотя это зависит от того, как OSX загружает терминалы, я чувствую, что это самое близкое, что мы можем получить.
Роберт Сколд

Возможно ли это для каждой вкладки?
Джошуа Мухайм

Каждая вкладка представляет собой отдельный логин tty, поэтому он должен работать.
Сет Ноубл

Терминал явно поддерживает этот тип поведения: когда он создает новый терминал, он назначает терминалу уникальный идентификатор и передает его сеансу терминала через переменную среды TERM_SESSION_ID. Когда он восстанавливает терминал для возобновления, он также восстанавливает тот же идентификатор сеанса, чтобы программы могли использовать его, чтобы связать произвольное состояние с восстановленными терминалами. Используйте это как часть имени файла вместо tty.
Крис Пейдж

@ ChrisPage проблема в том, что сессия отличается каждый раз, когда вы запускаете окно / вкладку. Так что это создаст отдельные истории и не связывает их между сеансами.
Рене Вуллер

5

Я реализовал это, добавив

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

в мой ~/.bash_profileфайл. Теперь, когда я закрываю терминал и открываю его снова, для каждой вкладки восстанавливается отдельная история команд. Также, когда я создаю новую вкладку, история по умолчанию инициализируется из.bash_history

Также, чтобы Terminalприложение сохраняло открытые вкладки между выходом и перезапуском, вам нужно убедиться, что эта опция "close windows when quitting app" (on Yosemite)отключена System Preferences -> General.


0

Вы можете установить пользовательский $ HISTFILE для каждого из ваших экземпляров терминала.


Есть ли способ сделать это автоматически для каждой вкладки / окна терминала? И убедитесь, что он использует то же самое, $HISTFILEкогда компьютер запускается обратно?
Роберт Скёльд

1
Да, это можно сделать, но тогда как вы снова получите доступ? Вам придется вручную жонглировать файлами, чтобы перейти к предыдущим файлам истории.
EmmEff

Терминал @EmmEff явно поддерживает этот тип поведения: когда он создает новый терминал, он назначает терминалу уникальный идентификатор и передает его сеансу терминала через переменную среды TERM_SESSION_ID. Когда он восстанавливает терминал для возобновления, он также восстанавливает тот же идентификатор сеанса, чтобы программы могли использовать его, чтобы связать произвольное состояние с восстановленными терминалами.
Крис Пейдж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.