当前位置: 首页>>技术教程>>正文


是否可以立即写入.bash_history?

, ,

问题描述

我常开很多很多终端的[现在我有7对这个工作区中打开]我经常搜索historygrep找到我刚写的一个最近的命令,但我不希望追捕终端,然后向上滚动并寻找它更多,等等。有时我的终端关闭,没有’exit,’,我写的所有东西都丢失了[有时候我需要一些我在被杀的终端上写的东西]。

那么是否有办法让每个终端立即写入.bash_history?或者至少每分钟一次,或者类似的事情?

最佳解决方案

一个简单的解决方案,详见Update Bash History in Realtime

它说这些命令放在.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中的行数增加历史计数器。

我认为这意味着这些命令几乎可以立即得到(你有一个终端,写回声1秒终端回声2,第一个回声3并且按下箭头两次,你应该有回声2可用。终端有权访问已写入的内容。

第三种解决方案

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/698.html,未经允许,请勿转载。