历史命令如何工作?


8

当我在终端中键入任何命令时,~/.bash_history直到退出会话,该命令才出现在文件中。

另外,当我手动编辑~/.bash_history文件时(例如,我删除了最后三个命令),当我键入文件时,history它仍然显示我从~/.bash_history文件中删除的命令。只有当我退出会话并再次登录时,它们才会消失。

我的~/.bash_history文件和history命令如何同步?



“当我在终端中键入任何命令时”并非如此。默认情况下,当您在命令前面放置一个空格时,它不会保存该命令。
Rinzwind'9

@Rinzwind通过编辑HISTCONTROL环境变量的值可以更改保存命令的行为,即使该命令前面有空格也是如此。
sys0dm1n

@ sys0dm1n“默认情况下”
Rinzwind

Answers:


10

当您打开bash终端时,它会加载其中的内容~/.bash_history并建立活动shell的历史记录(在RAM中),并将在该shell中执行的每个命令添加到其中-仅添加到它,而不添加到文件中。

仅当您关闭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*"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.