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
除非您需要正则表达式更方便。