Prompt_command 从 .bash_history 重新加载

Wes*_*cts 13 bash history environment-variables

我的.bashrc包含以下内容:

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

我注意到的:

  • .bash_history 没有得到追加。
  • 给定终端会话的历史记录包括从其他终端会话附加的条目

所需的行为是.bash_history在任何终端上的任何命令之后重新加载。实现这一目标的方法是什么?据推测,这将是对PROMPT_COMMAND?

ter*_*don 19

history -a命令仅附加到历史文件。这不会影响任何 shell 会话,除非您也从中读取。所以,你要找的是:

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

如中所述help history

  -r    read the history file and append the contents to the history
        list
Run Code Online (Sandbox Code Playgroud)

这样,您将首先将当前 shell 的历史记录附加到其中$HISTFILE,然后从中读取,将从任何其他 shell 实例附加的历史记录导入当前的历史记录。

请注意,如果您在一个终端中运行一个命令,它不会出现在另一个终端的历史记录中,直到您在第二个终端中运行一个命令。在$PROMPT_COMMAND运行前显示一个提示,所以如果第二终端仅仅是开放的,坐在那里,直到你在第二个运行的东西和新的提示显示它不会读的第一个新的命令运行。