如何在bash中同步终端会话命令历史记录?


13

~/.bash_history在终端会话中,我尝试搜索我最近的命令,但是它们不存在。我猜这是因为我有多个终端会话打开。

有没有一种方法可以将当前终端会话的命令历史记录同步(即,同步推送或同步写出)到bash_history文件中(而无需关闭会话并丢失该环境)?

(这在思想上与sync命令如何在某些系统上存储文件系统修改非常相似。)

我想我可以设置bash来保留多个会话历史记录,但是当您在新机器上工作并且意外忘记以可能想要的方式设置bash时,推送当前历史记录缓冲区的功能仍然会很有用。


我已经尝试过history -a shell内置命令,但是.bash_history在那之后我现在不知何故在文件上得到了“权限被拒绝” 。
n611x007

Answers:


19

将此行添加到.bashrc

export PROMPT_COMMAND="history -a; history -n"

打开新终端并检查。

说明

  • history -a 将新的历史记录行添加到历史记录文件。
  • history -n告诉bash读取未从历史记录文件读取到当前会话历史记录列表的行。
  • PROMPT_COMMAND:此变量的内容在bashshow提示符前按常规命令运行。因此,每次执行命令后,history -a; history -n都会执行一次,并且bash历史记录也会同步。

谢谢!我不知道为什么以前没有获得许可,但是现在有了新的终端,这似乎可以正常工作!我想我通常也应该可以history -a在未修改bashrc的终端中使用。
n611x007

什么时候必须开始担心这种性能的影响?(我在考虑低端设备,不确定这会带来多大的开销。)
n611x007 2014年

1
另外,您可能已经有一个提示命令,在这种情况下最好使用export PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

如果${PROMPT_COMMAND}为空,则由于前导而产生错误;
BorisDäppen17

@BorisDäppen是正确的,但是这很容易补救export PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
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.