Answers:
一个简单的解决方案,如“ 实时更新Bash历史记录”中所述。
它说将这些命令放在.bashrc配置中:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
第一个命令将.history文件模式更改为追加。第二个history -a命令配置要在每个shell提示符下运行的命令。该-a立即写入当前的/新线,以历史文件。
与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。
我认为这意味着这些命令几乎立即可用(您有一个终端,write echo 1,第二个终端echo 2,第一个终端,echo 3并且在两次按下向下箭头时,您应该已经echo 2可用。您必须在给定终端中发出命令才能访问已被写。
man history...中
bash内置命令,请参见中的描述man bash。您也可以使用help history。
-r和-c与仅具有之间的区别-a。
history -c; history -r?我想这对您更好,仅对我而言这会更好,我经常使用多个shell来完成一项工作,因此我希望将历史尽可能多地结合起来。我实际上介意该命令仅在完成后才写入历史记录。通常,当我启动到一个主机的ssh会话并想在第一个仍在运行时打开另一个主机时,我必须重新输入它,因为它尚未被写入历史记录。
history -a可能就够了
所有其他答案的注释(基本上是同一件事):
设置PROMPT_COMMAND="history -a;$PROMPT_COMMAND"在.bashrc(或朋友)就足够了。
另外,history -a只要您想“快照”当前会话中的历史记录,就可以手动运行。
shopt -s histappend不需要该命令,因为history -a总是将新行添加到文件中,而不会覆盖它。同样,至少从Bash 4开始,histappend它是默认行为。
shopt -s histappend。另请注意,我已将其添加到我的~/.bash_profile
histappend,因为这是默认行为。我会寻找它,但是我无法使用Mac。
control-r反向搜索一次bash的命令历史记录。比history | grep除非您需要正则表达式更方便。