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


13

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

Чи є спосіб я синхронізувати (наприклад, синхронізувати або виписати синхронізацію) історію команд сеансу поточного терміналу у файл bash_history (не закриваючи сеанс і не втрачаючи цього середовища)?

(Це було б віддалено схоже за ідеєю, як syncкоманда зберігає модифікації файлової системи в деяких системах.)

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


Я спробував history -a команду shell buildin, але після цього я якось отримую "дозвіл відхилений" у .bash_historyфайлі.
n611x007

Дублюване питання. Дивіться: unix.stackexchange.com/questions/1288/…
Едуардо Леджієро

Відповіді:


19

Додайте цей рядок до .bashrc:

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

Відкрийте новий термінал і перевірте.

Пояснення

  • history -a додає нові рядки історії до файлу історії.
  • history -nповідомляє bashчитати рядки, які не читаються з файлу історії до поточного списку історії сеансу.
  • PROMPT_COMMAND: вміст цієї змінної запускається як звичайна команда перед тим, як bashвідобразити рядок. Тож кожен раз, коли ви виконуєте команду, history -a; history -nвиконується і ваша bashісторія синхронізується.

Дякую! Я не знаю, чому мені раніше було відмовлено в дозволі, але зараз із новими терміналами це, здається, працює так, як очікувалося! Я думаю, що я, як правило, міг би використовуватись і history -aв терміналі з немодифікованим bashrc.
n611x007

коли треба починати турбуватися про наслідки цього для продуктивності? (Я думаю про пристрої низького класу, не знаю, наскільки це великі накладні витрати.)
n611x007

1
Також у вас вже може бути команда підказок, в цьому випадку краще скористатисяexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Фабіан

Якщо ${PROMPT_COMMAND}порожній, це помилка через ведучого;
Борис Даппен

@ BorisDäppen має рацію, але це легко виправитиexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.