Как работает команда истории?

8

Когда я набираю какую-либо команду в терминале, она не появляется в моем ~/.bash_historyфайле, пока я не выйду из сеанса.

Кроме того, когда я вручную редактирую свой ~/.bash_historyфайл (например, я удаляю последние три команды), при вводе historyон все равно показывает команды, которые я удалил из ~/.bash_historyфайла. Только когда я выйду из сеанса и снова войду в систему, они исчезнут.

Как мой ~/.bash_historyфайл и historyкоманда синхронизируются?

sys0dm1n
источник
2
это в ОЗУ ... Где хранится история bash?
Занна
«Когда я набираю какую-либо команду в терминале» Не совсем верно. Когда вы ставите пробел перед командой по умолчанию, эта команда не сохраняется.
Rinzwind
@Rinzwind Поведение сохранения команды, даже если перед ней есть пробел, можно изменить, отредактировав значение переменной окружения HISTCONTROL.
sys0dm1n
@ sys0dm1n "по умолчанию"
Rinzwind

Ответы:

10

Когда вы открываете терминал bash, он загружает содержимое ~/.bash_historyи создает историю активной оболочки (в ОЗУ), добавляя к ней все команды, выполняемые в этой оболочке, - и только к нему, а не к файлу.

Только когда вы закрываете bash-терминал, его история добавляется в ваш ~/.bash_historyфайл.


Варианты history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Опции для ~/.bashrcфайла

Если вы хотите изменить это поведение так, чтобы временная история сохранялась ~/.bash_historyнепосредственно после выполнения команды, добавьте эту строку:

PROMPT_COMMAND="history -a"

Если вы дополнительно хотите, чтобы каждый терминал автоматически загружал ~/.bash_historyфайл после каждого выполнения команды, добавьте эту строку:

PROMPT_COMMAND="history -a; history -c; history -r"

Если вы хотите исключить определенные команды (например, все, начинающиеся с sudoи cat) из сохранения, добавьте эту строку:

HISTIGNORE="sudo*:cat*"
Десерт
источник