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

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

我试图~/.bash_history在终端会话中搜索我最近的命令,但它们不在那里。我想这是因为我打开了多个终端会话。

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

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

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

答案1

将此行添加到.bashrc

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

打开新终端并检查。

解释

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

答案2

虽然我喜欢能够在终端之间共享历史记录,尤其是新终端。我不想共享每个命令,因为一个窗口通常正在执行一项特定任务,与其他窗口分开。我会让它们在 shell 退出时或在我请求时合并。

很长一段时间以来,我一直在寻找一种合并 bash 历史记录(带有时间戳)的方法,但我似乎没有什么可以接受的......

最后,我硬着头皮DIY了一个脚本来合并磁盘上的“.bash_history”和内存中的shell“history”。保留时间戳顺序以及这些时间戳内的命令顺序。

现在,当我获取它时(您可以根据需要将其设为别名或函数),我使用别名“hc”。我当前的 shell 会话在磁盘和内存之间合并,因此历史记录会在我需要时从其他先前的合并中更新(或通过“.bash_logout”从该 shell 注销时)。

您可以选择根据定义的 perl RE 删除唯一命令(即使是多行),和/或删除(清除)简单和/或敏感命令。调整以适应!

这就是结果...https://antofthy.gitlab.io/software/history_merge.bash.txt

享受。

相关内容