Иногда мой оконный менеджер X11 (i3) блокируется, и я вынужден переключиться на виртуальную консоль Linux или SSH на мою машину, чтобы восстановить контроль.
Обычно это происходит, когда у меня открыто множество окон rxvt, в каждом из которых запущена оболочка bash, содержащая десятки, если не сотни строк полезной истории командной строки, собранной за многие дни или недели.
Я использую shopt -s histappend
чтобы каждая оболочка bash добавляла свою историю в файл истории, когда она завершается упорядоченным образом. Обычно это работает очень хорошо и сохранит всю мою историю, если я аккуратно закрою каждую оболочку с помощью exit
или CTRL-D.
Но когда мой оконный менеджер блокируется, я не могу чисто выйти из сеансов bash, потому что нет возможности взаимодействовать с ними. Поэтому я пытался найти способ _remotely_ завершить работу оболочки bash таким образом, чтобы она записывала свою историю в файл истории.
Я попытался отправить многочисленные сигналы, включая SIGHUP
, как процессу оболочки bash, так и процессу rxvt, но ни один из них не привел к сохранению истории.
Я попытался перезапустить i3, но по разным причинам это не работает (сломанный RPC сокет, кажется). Убийство оконного менеджера закрывает все окна и оболочки bash, и я теряю историю от всех них.
Я пытался найти способ ввести "CTRL-D" в стандартный stdin
каждой оболочки, но, насколько я могу судить, это невозможно.
Я знаю способы заставить bash сохранять историю в файле истории после каждой команды, но я предпочитаю не использовать их, поскольку они портят индексы истории (то есть !nnn
не работает, потому что nnn
изменяется после каждой команды).
Есть ли способ сделать это и спасти мою драгоценную историю от определенного забвения?