是否有可能立即写入.bash_history?

我经常打开很多很多终端[现在我已经在这个工作区打开了7]我经常用grep搜索history来找到我刚刚写的命令,但我不想追捕终端然后向上滚动并追捕它等等。有时我的终端关闭而没有’退出’,我写的所有东西都丢失了[有时我需要一些我写在终端中的东西被杀死]。

那么有没有办法让每个终端立即写入.bash_history? 或至少一分钟,或类似的东西?

实时更新Bash历史记录中详述的简单解决方案。

它说将这些命令放在.bashrc配置中:

 shopt -s histappend PROMPT_COMMAND="history -a;$PROMPT_COMMAND" 

第一个命令更改.history文件模式以追加。 第二个配置history -a命令在每个shell提示符下运行。 -a立即将当前/新行写入历史文件。

与zsh相关:

  • 你如何在zsh中的终端之间共享历史记录?

尝试将其放入.bashrc

 shopt -s histappend # append to history, don't overwrite it export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" 

在此信用: https : //stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135

history -c清除正在运行的会话的历史记录。 这将使历史记录计数器减少$HISTSIZE的数量。 history -r读取$HISTFILE的内容并将它们插入到当前运行的会话历史记录中。 这将使历史记录计数器增加$HISTFILE的行$HISTFILE

我认为这意味着命令几乎可以立即使用(你有一个终端,写echo 1 ,第二个终端echo 2 ,第一个echo 3 ,按下箭头两次,你应该有echo 2可用。你必须在一个命令中发出命令)给予终端可以访问已写入的内容。

我有一个包含大约100000个条目的大型历史文件,清除历史列表并读取整个历史文件的变体(使用history -chistory -r )在显示提示之前引入了明显的(可能0.2秒)延迟。 使用history -n以便只从历史文件中读取新行更快:

 shopt -s histappend PROMPT_COMMAND='history -a;history -n' 

PROMPT_COMMAND不必导出,因为它是一个shell变量。

所有其他答案的注释(基本上是相同的):

.bashrc (或朋友)中设置PROMPT_COMMAND="history -a;$PROMPT_COMMAND"就足够了。

此外,只要您想在当前会话中“快照”历史记录,就可以手动运行history -a

不需要命令shopt -s histappend因为history -a总是在文件中添加新行并且永远不会覆盖它。 此外,至少从Bash 4开始, histappend是默认行为。