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

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

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

106
задан 12 July 2012 в 07:55

37 ответов

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

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

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

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

Относится к zsh:

65
ответ дан 31 July 2018 в 10:26

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

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

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

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

Относится к zsh:

65
ответ дан 31 July 2018 в 11:28

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

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

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

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

Относится к zsh:

65
ответ дан 2 August 2018 в 02:50

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

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

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

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

Относится к zsh:

65
ответ дан 4 August 2018 в 18:36

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

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

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

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

Относится к zsh:

65
ответ дан 6 August 2018 в 03:02

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

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

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

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

Относится к zsh:

65
ответ дан 7 August 2018 в 20:43

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

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

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

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

Относится к zsh:

65
ответ дан 10 August 2018 в 09:05

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

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

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

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

Относится к zsh:

66
ответ дан 15 August 2018 в 21:57
  • 1
    ну этот вид работ. Я попробовал еще несколько тестов, и, похоже, он работает только с первой командой. это работает правильно для вас? – Matt 16 October 2011 в 20:03

Попробуйте поместить это в свой .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, первый эхо-сигнал 3 и дважды нажав стрелку вниз, вы должны иметь эхо-2. должен выдавать команду в данном терминале, чтобы иметь доступ к тому, что было написано.

46
ответ дан 25 May 2018 в 18:06
  • 1
    Brilliant! Благодарю. Интересно, почему эти параметры не документированы в man history ... – artfulrobot 17 May 2013 в 17:31
  • 2
    @artfulrobot: эта команда является bash встроенной, поэтому она описана в man bash. Вы также можете использовать help history. – pabouk 2 July 2014 в 14:32
  • 3
    У меня есть zsh, который работает так: каждая оболочка отслеживает свою историю OWN (и до этого, объединенную историю), и каждая команда добавляется к объединенной истории. Это отличается и лучше , чем всегда перезагружать историю для каждой команды для каждой оболочки, потому что я имею тенденцию иметь другую «нить работы», или "работа" для каждого терминала оболочки. Я думаю, что это разница между ними с -r и -c и только с -a. – Steven Lu 25 February 2015 в 13:40
  • 4
    Итак, что именно вы используете? [F1]? Я думаю, это лучше для вас, было бы лучше для меня только иногда, я часто использую несколько раковин для выполнения одной работы, поэтому я предпочитаю, чтобы история максимально сочеталась. Я действительно помню, что команда написана в историю только после ее завершения. как правило, когда я запускаю сеанс ssh на один хост и хочу открыть еще один, пока первый все еще работает, я должен повторить его, потому что он еще не был записан в историю. – sup 25 February 2015 в 14:36
  • 5
    Я думаю, что я никогда не зацикливался достаточно долго, чтобы понять, как заставить bash одновременно отслеживать параллельные потоки истории (на основе экземпляра оболочки) , в то время как сразу записывает историю в основной файл истории. Zsh делает это намного проще, плюс, кроме того, я определил функцию zsh, чтобы выписать много причудливых метаданных в файл расширенной истории моего проекта. Это стало весьма незаменимым. Во всяком случае, в механизме есть precmd () и preexec () для zsh, которые отправляют args, описывающие введенную команду. Затем становится тривиальным направлять это в файлы. history -a может быть достаточно – Steven Lu 3 June 2015 в 07:03

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

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

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

25
ответ дан 25 May 2018 в 18:06
  • 1
    Brilliant! Больше нет потерянной истории, когда соединение падает! – Tobia 15 January 2016 в 18:45
  • 2
    Это замечательно. Добавляя файл и считывая его из файла, он будет делиться историей на нескольких терминалах. – wisbucky 20 February 2018 в 23:45

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 25 July 2018 в 21:09

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 25 July 2018 в 21:09

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

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

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

29
ответ дан 25 July 2018 в 21:09

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 31 July 2018 в 10:26

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 31 July 2018 в 10:26

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

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

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

29
ответ дан 31 July 2018 в 10:26

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 31 July 2018 в 11:28

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 31 July 2018 в 11:28

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

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

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

29
ответ дан 31 July 2018 в 11:28

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 2 August 2018 в 02:50

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 2 August 2018 в 02:50

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

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

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

29
ответ дан 2 August 2018 в 02:50

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 4 August 2018 в 18:36

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 4 August 2018 в 18:36

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

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

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

29
ответ дан 4 August 2018 в 18:36

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 6 August 2018 в 03:02

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 6 August 2018 в 03:02

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

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

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

29
ответ дан 6 August 2018 в 03:02

Попробуйте вставить это в свой .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-терминал-windows / 3055135

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

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

48
ответ дан 7 August 2018 в 20:43

Примечание для всех остальных ответов (которые в основном совпадают):

Достаточно установить PROMPT_COMMAND="history -a;$PROMPT_COMMAND" в .bashrc (или в друзьях).

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

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

1
ответ дан 7 August 2018 в 20:43

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

Похожие вопросы: