Вы говорите креативно и привлекательно? OK:
trap on_exit EXIT
trap on_usr1 USR1
on_exit() {
history -a
trap '' USR1
killall -u "$USER" -USR1 bash
}
on_usr1() {
history -n
}
Брось это .bashrcи иди. При этом используются сигналы, чтобы каждый bashпроцесс проверял наличие новых записей в истории при выходе другого. Это довольно ужасно, но это действительно работает.
Как это работает?
trapустанавливает обработчик сигнала для системного сигнала или одного из внутренних событий Bash. EXITСобытие любое контролируемое прекращение оболочки, в то время как USR1это SIGUSR1, бессмысленный сигнал мы присваивая.
Всякий раз, когда оболочка выходит, мы:
- Добавить всю историю в файл явно.
- Отключите
SIGUSR1обработчик и заставьте эту оболочку игнорировать сигнал.
- Отправьте сигнал всем запущенным
bashпроцессам от одного и того же пользователя.
Когда SIGUSR1прибывает, мы:
- Загрузите все новые записи из файла истории в список истории оболочки в памяти.
Из-за способом Баша ручки сигналов, не будет на самом деле получить новые данные истории , пока вы не попали Enterв следующий раз, так что это не делает лучше на этом фронте , чем положить history -nв PROMPT_COMMAND. Тем не менее, он сохраняет чтение файла постоянно, когда ничего не происходит, и запись вообще не происходит, пока оболочка не выйдет.
Однако здесь есть еще пара вопросов. Во-первых, ответом по умолчанию SIGUSR1является завершение оболочки. Любые другие bashпроцессы (например, запуск сценариев оболочки) будут уничтожены. .bashrcне загружается неинтерактивными оболочками. Вместо этого загружается файл с именемBASH_ENV : вы можете установить эту переменную в вашей среде глобально, чтобы указывать на файл с помощью:
trap '' USR1
в нем игнорировать сигнал в них (что решает проблему).
Наконец, хотя это и делает то, что вы просили, заказ, который вы получите, будет немного необычным. В частности, биты истории будут повторяться в разных порядках по мере их загрузки и сохранения отдельно. Это, по сути, присуще тому, что вы просите, но имейте в виду, что история со стрелкой вверх становится намного менее полезной на данном этапе. Тем не менее, подстановки истории и тому подобное будут распространяться и работать хорошо.