Можно ли сделать запись в.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
это поведение по умолчанию.