Я часто открывать много и много терминалов [Сейчас у меня есть 7 открыть на этом рабочем пространстве] , и я часто поиска history
с , grep
чтобы найти команду , я только что написал недавно, но я не хочу , чтобы выследить терминал , а затем выполните прокрутку вверх и охотиться за ним больше и т. д. Иногда мои терминалы закрываются без «выхода», и все, что я написал, теряется [Иногда мне нужно что-то, что я написал в терминале, который был убит].
Так есть ли способ сделать так, чтобы каждый терминал немедленно записывал в .bash_history? или хотя бы раз в минуту или что-то в этом роде?
control-r
для обратного поиска в истории команд одного bash. Удобнее, чемhistory | grep
если вам не нужно регулярное выражение.Ответы:
Простое решение, как описано в Обновлении Bash History в реальном времени .
Он говорит, чтобы поместить эти команды в конфигурации .bashrc:
Первая команда изменяет
.history
режим файла для добавления. А вторая настраиваетhistory -a
команду, которая будет запускаться при каждом приглашении оболочки.-a
Немедленно записывает текущие / новые строки в файл истории.Связано с zsh:
источник
Попробуйте вставить это в свой
.bashrc
:Кредит здесь: 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
доступны. Вы должны выполнить команду в данном терминале, чтобы иметь доступ к тому, что имеет было написано.источник
man history
...bash
встроенной, поэтому она описана вman bash
. Вы также можете использоватьhelp history
.-r
и-c
просто иметь-a
.history -c; history -r
? Я думаю, что это лучше для вас, это было бы лучше для меня только иногда, я часто использую несколько оболочек для выполнения одной работы, поэтому я предпочитаю, чтобы история объединялась как можно больше. Я на самом деле возражаю, что команда записывается в историю только после ее завершения. обычно, когда я запускаю ssh-сессию на одном хосте и хочу открыть другой, пока первый еще работает, мне приходится перепечатывать его, потому что он еще не был записан в историю.history -a
может быть достаточноУ меня большой файл истории с около 100000 записей, и варианты, которые очищают список истории и читают весь файл истории (используя
history -c
иhistory -r
), вносят заметную (может быть, 0,2 секунды) задержку перед отображением подсказки. Использованиеhistory -n
так, чтобы только новые строки читались из файла истории, быстрее:PROMPT_COMMAND
не нужно экспортировать, потому что это переменная оболочки.источник
Примечание для всех других ответов (которые в основном то же самое):
Установка
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
в.bashrc
(или друзья) достаточно.Кроме того, вы можете вручную запускать
history -a
каждый раз, когда вы хотите «сделать снимок» истории в текущем сеансе.Команда
shopt -s histappend
не нужна, потому чтоhistory -a
всегда добавляет новые строки в файл и никогда не перезаписывает его. Кроме того, по крайней мере, начиная с Bash 4,histappend
это поведение по умолчанию.источник
shopt -s histappend
. Также обратите внимание, что я добавил его в мой~/.bash_profile
histappend
, так как это поведение по умолчанию. Я бы искал это, но у меня нет доступа к Mac.