Когда я ввожу любую команду в терминале, это не появляется в моем ~/.bash_history
файл, пока я не выхожу из своей сессии.
Кроме того, когда я вручную редактирую мой ~/.bash_history
файл (например, я удаляю последние три команды), когда я ввожу history
это все еще показывает команды, что я удалил из ~/.bash_history
файл. Только, когда я выхожу из своей сессии и вхожу в систему снова, они исчезают.
Как делает мой ~/.bash_history
файл и history
команда синхронизируется?
Когда вы открываете терминал bash, он загружает содержимое ~/.bash_history
и создает историю активной оболочки (в ОЗУ), добавляя каждую команду, выполняемую в этой оболочке, к ней - и только к ней, а не к файлу. [ 1114]
Только когда вы закрываете 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*"