Як змусити bash (Terminal.app) запам'ятати історію попередніх сесій?


11

На моєму комп’ютері на роботі мій баш-корпус пам’ятає історію попередніх сеансів, навіть якщо я щойно відкрив новий термінал.
У моєму комп’ютері вдома цього не відбувається.
У мене однакова ОС 10.6.8 на обох машинах, і я не маю жодної історії, пов’язаної з історією .bash_profile.
Як я можу налаштувати це на своєму домашньому комп’ютері, щоб він пам’ятав історію протягом сеансів?


Також запитували на superuser.com/q/421544/4714
glenn jackman

Найкращою відповіддю: unix.stackexchange.com/questions/1288 / ...
ОМП

Відповіді:


11

Вам потрібно буде сказати bash, де зберігати файл історії та скільки рядків, які потрібно зберегти:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
Це все повинно бути непотрібним за замовчуванням. Конфігурація bash за замовчуванням (принаймні на Mac OS X) включає історію команд.
Кріс Пейдж

Ключове слово, / повинен /. Якщо його історія не записує, це змусить Баш зберегти історію на init.
Озеро Аарон

2
Не просто слід , а буде, якщо щось не було зроблено для придушення поведінки історії за замовчуванням, і в цьому випадку просто забивання якихось значень у ці змінні є просто вирішенням фактичної проблеми. Якщо ця відповідь вирішує питання, то щось інше справді переплутане і має бути виправлено, щоб уникнути інших питань.
Кріс Пейдж

Ви можете встановити ці налаштування, але я знайшов більш просте рішення / відповідь, якщо ви просто хочете "включити" історію на терміналі. Для мене це просто добре працювало apple.stackexchange.com/a/220667/243988 (я використовую macOS High Sierra)
jpruizs

4

Щойно я виявив, що у мене схожа проблема, хоча у мого роботодавця є лише два Mac, і жоден не сидить на моєму столі. Неприйнятний, але бій іншим разом.

У будь-якому разі, вдома Mac Mini (перенесений з MacBook Pro) не співпрацював навіть після налаштування .bashrcта / або .profile. Тоді я виявив, що моєму ~/.bash_historyфайлу загадково належить корінь. Довелося це зробити:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Так, я знаю, що це можна зробити за допомогою меншої кількості команд. Звичка.)

Потім я вийшов із Терміналу і запустив новий. Вуто! Всілякі раніше втрачені історії поверталися назад. Як дуже приємно.

Ймовірність того, що хтось прочитає це випадково поставив себе під загрозу: 0,2%. Я впевнений, що я це заглушив, коли надто ревно "фіксував" щось інше.


4

У мене була ця проблема, і для мене працювало створення файлу, який називався .bash_sessions_disableв моїй папці користувача ( ~/).

В основному OS X створює файли історії в .bash_sessionsпапці для кожного сеансу (в моєму випадку - один для кожної вкладки). І навіть правильно закриваючи ці сеанси, OS X не відтворює історію .bash_history.

Створюючи, .bash_sessions_disableви відключаєте цю поведінку.

touch ~/.bash_sessions_disable

Вимкнення історії команд за сеанс (поведінка за замовчуванням) - це протилежне тому, що запитують.
Кріс Пейдж

@ChrisPage Це правильно лише в тому випадку, якщо запитуючий запитує про історію сеансу за сеанс, що, здається, не так («пам’ятайте історію протягом сеансів»). Відключення поведінки bash сеансу ENABLES відтворює одну історію, .bash_historyа не зберігає історію під .bash_sessions/папкою. Це правильна відповідь імхо.
Метт H

@MattH Питання задає питання про те, як знов працювати історію, оскільки, здається, вона взагалі не працює, а відключення цієї функції історії сеансу не йде в правильному напрямку. Якщо в механізмі історії сеансу є помилка, хтось повинен подати звіт про помилку, але подавати відповідь так, як ніби її вимкнення є якимось загальним правильним для всіх користувачів - це неправильно. Зазвичай це працює просто чудово. Дивіться мої коментарі до різних відповідей для отримання додаткової інформації.
Кріс Пейдж

Я також повинен був згадати про це, коли я спочатку прокоментував: вимкнення всього механізму збереження / відновлення bash мається на увазі в крайньому випадку, і його слід уникати, якщо це можливо. Ви можете просто вимкнути поведінку історії команд за сеансом, встановивши SHELL_SESSION_HISTORY0, як це зафіксовано в /etc/bashrc_Apple_Terminal.
Кріс Пейдж

1

Ця відповідь з цієї теми Reddit врятувала мене:

Ймовірно, RVM заважає виходу "гачок" для запуску bash_sesions. Якщо ви прокоментуєте наступний рядок у вашому .bash_profile, він повинен працювати.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

0

У мене також була схожа проблема, історія не зафіксована. Дані рішення не спрацювали, але я нарешті з’ясував, що проблема така ж проста, як і відсутні .bash_history

Рішення полягало в тому, щоб перейти /home/[username]/і додати файл .bash_history, так що

nano .bash_history

а потім введіть що-небудь у файл (інакше його не буде створено), вийдіть і збережіть. Після цього історія почала нормально функціонувати.


Якщо це вирішує проблему, то щось інше не так і слід виправити, щоб уникнути інших проблем. Якщо ви запускаєте Bash, коли немає файлу історії, він створить його. Якщо він не намагається створити його, або він не в змозі створити його, щось не так із сценарієм запуску оболонки або дозволами домашнього каталогу. Наприклад, дивіться відповідь: apple.stackexchange.com/a/118764/6883
Chris Page
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.