Вопрос или проблема
Я обычно имею несколько открытых терминалов 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
-
Настройка параметров истории Bash: Напоминаем, что вы уже используете следующие настройки:
shopt -s histappend # добавлять в файл истории, а не перезаписывать HISTSIZE=1000 # максимальное количество команд в памяти HISTFILESIZE=2000 # максимальное количество команд в файле истории
Эти параметры важны, так как они позволяют вам накапливать больше команд в истории, но для достижения вашей цели требуется дополнительно настроить механизм работы с историей.
-
Обновление конфигурации Bash: Добавьте следующую строку в свой файл
~/.bashrc
:export PROMPT_COMMAND='history -a; history -n'
Давайте объясним, что делают эти команды:
-
history -a
: Эта команда заставляет Bash записывать текущую сессию в файл истории (~/.bash_history
) сразу после выполнения каждой команды. Это позволяет сохранять историю сразу, а не только в конце сессии. -
history -n
: Эта команда загружает (читаем) новые команды из файла истории, которые могли быть добавлены другими терминалами. Это обновляет вашу историю при каждой новой команде.
-
-
Применение изменений: После внесения изменений в
~/.bashrc
, вам необходимо перезапустить терминал или обновить текущую сессию, выполнив команду:source ~/.bashrc
-
Проверка работоспособности: Чтобы проверить, работает ли новая настройка, откройте несколько терминалов и выполните несколько команд в каждом из них. После этого выполните команду
history
в любом терминале. Вы должны увидеть объединенный список всех команд, выполненных в разных терминалах.
Примечания
-
Если вы используете специальные инструменты управления сессиями или терминалами, такие как tmux или screen, вам может понадобиться дополнительно настроить их для работы с историей.
-
Также учитывайте, что если у вас много терминалов, информация в файле истории может удлиниться и стать трудной для поиска. Поэтому рекомендуется время от времени очищать историю или вести её в отдельные файлы для удобства.
Заключение
Надеюсь, эти шаги помогут вам получить объединённую историю команд в нескольких терминалах Bash. Наличие единой истории может значительно упростить вашу работу и сделать её более продуктивной. Если у вас возникнут дополнительные вопросы или потребуется помощь с настройками, не стесняйтесь обращаться за поддержкой.