Как заставить bash (Terminal.app) запомнить историю предыдущих сессий?

11

На моем рабочем компьютере моя оболочка bash запоминает историю предыдущих сессий, даже если я только что открыла новый терминал.
На моем компьютере дома этого не происходит.
У меня одинаковая ОС 10.6.8 на обеих машинах, и у меня нет настроек, связанных с историей .bash_profile.
Как я могу настроить это на своем домашнем компьютере, чтобы он запоминал историю между сеансами?

Petruza
источник
Также спросили на superuser.com/q/421544/4714
Гленн Джекман
Лучший ответ: unix.stackexchange.com/questions/1288/…
mles

Ответы:

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) включает историю команд.
Крис Пейдж
Ключевое слово / следует /. Если он не записывает историю, это заставит bash сохранить историю при инициализации.
Аарон Лэйк
2
Не просто следует , а будет, если только что-то не было сделано для подавления поведения истории по умолчанию, и в этом случае простое добавление некоторых значений в эти переменные - это просто решение реальной проблемы. Если этот ответ решает проблему, то что-то еще действительно испортилось и должно быть исправлено, чтобы избежать других проблем.
Крис Пейдж
Вы можете настроить эти параметры, но я нашел более простое решение / ответ, если вы просто хотите «включить» историю на терминале. У меня это работало нормально apple.stackexchange.com/a/220667/243988 (я использую macOS High Sierra)
jpruizs
4

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

В любом случае, дома Mac Mini (перенесенный из MacBook Pro) не работал даже после настройки .bashrcи / или .profile. Затем я обнаружил, что мой ~/.bash_historyфайл таинственно принадлежит root. Пришлось сделать это:

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

(Да, я знаю, что это можно сделать меньшим количеством команд. Привычка.)

Затем я вышел из терминала и запустил новый. Woot! Все виды истории, ранее потерянные, возвращались назад. Как хорошо.

Вероятность того, что кто-то прочтет это, случайно оказалась в этом затруднительном положении: 0,2%. Я уверен, что испортил это, когда слишком усердно «исправлял» что-то еще.

kelvin0mql
источник
4

У меня была эта проблема, и для меня сработало создание файла с именем .bash_sessions_disableв моей папке пользователя ( ~/).

В основном OS X создает файлы истории в .bash_sessionsпапке для каждой сессии (в моем случае, один для каждой вкладки). И даже правильно закрывая эти сеансы, OS X не воспроизводит историческое в .bash_history.

Создание .bash_sessions_disableвы отключите это поведение.

touch ~/.bash_sessions_disable
Клебер Кихара
источник
Отключение истории команд для каждой сессии - поведение по умолчанию - противоположно тому, что запрашивается.
Крис Пейдж
@ChrisPage Это верно только в том случае, если спрашивающий спрашивает об истории сеансов, что, похоже, не так («помните историю между сеансами»). Отключение поведения сеанса bash ВКЛЮЧАЕТ воспроизведение одной истории .bash_historyвместо сохранения истории в .bash_sessions/папке. Это правильный ответ imho.
Мэтт Н
@MattH Вопрос состоит в том, как заставить историю работать снова, потому что она, кажется, не работает вообще, и отключение этой функции истории для каждой сессии не идет в правильном направлении. Если есть ошибка в механизме истории сеанса, кто-то должен подать отчет об ошибке, но представить ответ, как будто его отключение как-то в общем правильно для всех пользователей ... неправильно. Это нормально работает просто отлично. Смотрите мои комментарии на различные ответы для получения дополнительной информации.
Крис Пейдж
Я должен был также упомянуть об этом, когда я сначала прокомментировал: отключение всего механизма сохранения / восстановления bash подразумевается как последнее средство, и его следует избегать, если это возможно. Вы можете просто отключить поведение истории команд каждой сессии, установив SHELL_SESSION_HISTORY0, как описано в /etc/bashrc_Apple_Terminal.
Крис Пейдж
1

Этот ответ из этой ветки Reddit спас меня:

Это, вероятно, RVM, предотвращающий выходную "зацепку" для запуска bash_sessions. Если вы закомментируете следующую строку в вашем .bash_profile, она должна работать.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
noio
источник
0

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

Решение было пойти /home/[username]/и добавить файл .bash_history, так

nano .bash_history

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

Fabian
источник
Если это решает проблему, значит что-то не так и должно быть исправлено, чтобы избежать других проблем. Если вы запустите Bash при отсутствии файла истории, он его создаст. Если он не пытается создать его или не может его создать, значит, что-то не так с каким-то сценарием запуска оболочки или разрешениями домашнего каталога. Например, см. Ответ: apple.stackexchange.com/a/118764/6883
Крис Пейдж