历史命令如何工作?

sys*_*m1n 11 command-line bash bash-history

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

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

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

des*_*ert 14

当您打开 bash 终端时,它会加载~/.bash_history活动 shell 的内容并构建活动 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)
Run Code Online (Sandbox Code Playgroud)

~/.bashrc文件选项

如果要更改此行为以便~/.bash_history在执行命令后直接保存临时历史记录,请添加以下行:

PROMPT_COMMAND="history -a"
Run Code Online (Sandbox Code Playgroud)

如果您还希望每个终端~/.bash_history在每次命令执行后自动加载文件,请添加以下行:

PROMPT_COMMAND="history -a; history -c; history -r"
Run Code Online (Sandbox Code Playgroud)

如果您想从保存中排除某些命令(例如所有以sudo和开头的命令cat),请添加以下行:

HISTIGNORE="sudo*:cat*"
Run Code Online (Sandbox Code Playgroud)