是否有可能立即写入.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 -c
和history -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
是默认行为。