Можно ли сделать запись в.bash_history незамедлительной?

Я часто открываю множество терминалов [прямо сейчас у меня есть 7 открытых в этом рабочем пространстве], и я часто ищу history с grep чтобы найти команду, которую я только что написал, но я не хочу выслеживать терминал, а затем прокручивать вверх и охотиться за ней больше и т. д. Иногда мои терминалы закрываются без "выхода" и всего, что я написал теряется [Иногда мне нужно что-то, что я написал в терминале, который был убит].

Так есть ли способ сделать так, чтобы каждый терминал немедленно записывал в.bash_history? или хотя бы раз в минуту или что-то в этом роде?

4 ответа

Решение

Простое решение, как описано в Обновлении Bash History в реальном времени.

Он говорит, чтобы поместить эти команды в конфигурации.bashrc:

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

Первая команда меняет .history режим файла для добавления. А второй настраивает history -a команда для запуска в каждом приглашении оболочки. -a немедленно записывает текущие / новые строки в файл истории.

Связано с zsh:

Попробуйте положить это в свой .bashrc:

shopt -s histappend                      # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Кредит здесь: https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135

history -c очищает историю запущенного сеанса Это уменьшит счетчик истории на сумму $HISTSIZE, history -r прочитать содержание $HISTFILE и вставьте их в текущую текущую историю сеанса. Это увеличит счетчик истории на количество строк в $HISTFILE,

Я думаю, это означает, что команды доступны практически сразу (у вас есть один терминал, напишите echo 1, второй терминал echo 2, первый echo 3 и после нажатия стрелки вниз дважды, вы должны иметь echo 2 имеется в наличии. Вы должны выполнить команду в данном терминале, чтобы иметь доступ к тому, что было написано.

У меня есть большой файл истории с около 100000 записей, и варианты, которые очищают список истории и читают весь файл истории (используя history -c а также history -r) ввести заметную (может быть, 0,2 секунды) задержку перед отображением подсказки. С помощью history -n так что только новые строки читаются из файла истории быстрее:

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

PROMPT_COMMAND не нужно экспортировать, потому что это переменная оболочки.

Примечание для всех других ответов (которые в основном то же самое):

настройка PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или друзей) достаточно.

Также вы можете запустить вручную history -a всякий раз, когда вы хотите "сделать снимок" истории в текущем сеансе.

Команда shopt -s histappend не нужно, потому что history -a всегда добавляет новые строки в файл и никогда не перезаписывает его. Кроме того, по крайней мере, с Bash 4, histappend это поведение по умолчанию.

Другие вопросы по тегам