Как иметь единую историю из всех терминалов bash?

Вопрос или проблема

Я обычно имею несколько открытых терминалов bash и хотел бы, чтобы команды из всех сеансов терминала записывались в один файл истории, чтобы я мог видеть свою историю команд в хронологическом порядке во всех сеансах терминала.

Например, скажем, у меня открыты два терминала bash, A и B. В хронологическом порядке я выполняю различные команды:

term_A: $ cmd1
term_A: $ cmd2
term_B: $ cmd3
term_A: $ cmd4
term_B: $ cmd5
term_B: $ cmd6

Позже, когда я выполню команду history из любого терминала (либо A, B, либо другого нового или существующего сеанса терминала), я должен увидеть команды из обоих терминалов в хронологическом порядке:

term_X: $ history
857 cmd1
858 cmd2
859 cmd3
860 cmd4
861 cmd5
862 cmd6

Как мне настроить мой .bashrc и/или другие параметры, чтобы это было возможно?

Кстати, у меня уже есть следующее в моем ~/.bashrc, но, похоже, этого недостаточно для того, что я пытаюсь достичь:

# добавлять в файл истории, не перезаписывая его
shopt -s histappend

# для установки длины истории см. HISTSIZE и HISTFILESIZE в bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

В ваш .bashrc добавьте строку export PROMPT_COMMAND='history -a'

Это взято отсюда и уже было обсуждено здесь

Ответ или решение

Для того чтобы в нескольких терминальных сеансах Bash был единый файл истории команд, необходимо внести некоторые изменения в файл конфигурации ~/.bashrc. Вы хотите, чтобы команды, введенные в разных терминалах, записывались в один и тот же файл истории, и чтобы при выполнении команды history в любом из терминалов отображался полный хронологический журнал команд.

Шаги для настройки объединенной истории команд в Bash

  1. Настройка параметров истории Bash: Напоминаем, что вы уже используете следующие настройки:

    shopt -s histappend  # добавлять в файл истории, а не перезаписывать
    HISTSIZE=1000        # максимальное количество команд в памяти
    HISTFILESIZE=2000    # максимальное количество команд в файле истории

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

  2. Обновление конфигурации Bash: Добавьте следующую строку в свой файл ~/.bashrc:

    export PROMPT_COMMAND='history -a; history -n'

    Давайте объясним, что делают эти команды:

    • history -a: Эта команда заставляет Bash записывать текущую сессию в файл истории (~/.bash_history) сразу после выполнения каждой команды. Это позволяет сохранять историю сразу, а не только в конце сессии.

    • history -n: Эта команда загружает (читаем) новые команды из файла истории, которые могли быть добавлены другими терминалами. Это обновляет вашу историю при каждой новой команде.

  3. Применение изменений: После внесения изменений в ~/.bashrc, вам необходимо перезапустить терминал или обновить текущую сессию, выполнив команду:

    source ~/.bashrc
  4. Проверка работоспособности: Чтобы проверить, работает ли новая настройка, откройте несколько терминалов и выполните несколько команд в каждом из них. После этого выполните команду history в любом терминале. Вы должны увидеть объединенный список всех команд, выполненных в разных терминалах.

Примечания

  • Если вы используете специальные инструменты управления сессиями или терминалами, такие как tmux или screen, вам может понадобиться дополнительно настроить их для работы с историей.

  • Также учитывайте, что если у вас много терминалов, информация в файле истории может удлиниться и стать трудной для поиска. Поэтому рекомендуется время от времени очищать историю или вести её в отдельные файлы для удобства.

Заключение

Надеюсь, эти шаги помогут вам получить объединённую историю команд в нескольких терминалах Bash. Наличие единой истории может значительно упростить вашу работу и сделать её более продуктивной. Если у вас возникнут дополнительные вопросы или потребуется помощь с настройками, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...