Як я можу змусити Термінал зберігати окрему історію на вкладку / вікно?


13

Коли я перезавантажую свій Mac, він закриває і зберігає буфери для кожної вкладки належним чином, оскільки він знову є, коли комп'ютер запускається в режимі резервного копіювання. Але історія команд не буферизується належним чином у вікні / вкладці. Вони всі однакові буфера.

Я припускаю, що це тому, що bash використовує те саме ~/.bash_historyдля всіх терміналів, але чи є спосіб уникнути цього? Щоб зробити баш, чи, може, термінал, зберігати їх окремо?


Перегляньте цю публікацію @ Помилка сервера, вона пояснює, як це зробити.
Мутант

Відповіді:


7

Ви можете зробити щось подібне у своєму .bashrc:

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

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


Щиро дякую! Позначення цього як вирішеного. Навіть незважаючи на те, що це залежить від того, як OSX завантажує термінали, я відчуваю, що це найближче, що ми можемо отримати.
Роберт Скольд

Чи це також можливо за вкладку ??
Джошуа Мухайм

Кожна вкладка - це окремий tty логін, тому він повинен працювати.
Сет Благородний

Термінал має явну підтримку такого типу поведінки: коли він створює новий термінал, він присвоює терміналу унікальний ідентифікатор і передає його сеансу терміналу через змінну середовища TERM_SESSION_ID. Коли він відновлює термінал для Resume, він також відновлює той самий ідентифікатор сеансу, щоб програми могли використовувати це для асоціації довільного стану з відновленими терміналами. Використовуйте це як частину імені файлу замість 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 Terminal має явну підтримку такого типу поведінки: коли він створює новий термінал, він призначає терміналу унікальний ідентифікатор і передає його термінальному сеансу через змінну середовища TERM_SESSION_ID. Коли він відновлює термінал для Resume, він також відновлює той самий ідентифікатор сеансу, щоб програми могли використовувати це для асоціації довільного стану з відновленими терміналами.
Кріс Пейдж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.