n61*_*007 23 bash command-history synchronization
我试图~/.bash_history在终端会话中搜索我最近的命令,但它们并不存在。我想这是因为我打开了多个终端会话。
有没有一种方法可以将当前终端会话的命令历史同步(即同步推送或同步写出)到 bash_history 文件中(不关闭会话并丢失该环境)?
(它与sync命令如何在某些系统上存储文件系统修改的想法非常相似。)
我想我可以设置 bash 来保留多个会话历史记录,但是当您在一台新机器上工作并且您不小心忘记按照您可能想要的方式设置 bash 时,推送当前历史记录缓冲区的能力仍然很有用.
cuo*_*glm 27
将此行添加到.bashrc:
export PROMPT_COMMAND="history -a; history -n"
Run Code Online (Sandbox Code Playgroud)
打开新终端并检查。
解释
history -a 将新的历史行追加到历史文件中。history -n告诉bash将未从历史文件中读取的行读取到会话的当前历史列表中。PROMPT_COMMAND:此变量的内容在bash显示提示之前作为常规命令运行。因此,每次执行命令后,history -a; history -n都会执行,并且您的bash历史记录会同步。虽然我喜欢能够在终端之间共享历史记录,尤其是新终端。我不想共享每个命令,因为一个窗口通常正在执行一项特定任务,与其他窗口分开。我会让它们在 shell 退出时或在我请求时合并。
很长一段时间以来,我一直在寻找一种合并 bash 历史记录(带有时间戳)的方法,但我似乎没有什么可以接受的......
最后,我硬着头皮DIY了一个脚本来合并磁盘上的“.bash_history”与内存中的shell“history”。保留时间戳顺序以及这些时间戳内的命令顺序。
现在,当我获取它时(您可以根据需要将其设为别名或函数),我使用别名“hc”。我当前的 shell 会话在磁盘和内存之间合并,因此历史记录会在我需要时从其他以前的合并中更新(或通过“.bash_logout”从该 shell 注销时)。
您可以选择根据定义的 perl RE 删除唯一命令(即使是多行),和/或删除(清除)简单和/或敏感命令。调整以适应!
这就是结果... https://antofthy.gitlab.io/software/history_merge.bash.txt
享受。