我常开很多很多终端的[现在我有7对这个工作区中打开]我经常搜索history与grep查找我刚写的一个最近的命令,但我不希望追捕终端,然后向上滚动并寻找更多,等等。有时我的终端在没有“退出”的情况下关闭,我写的所有东西都丢失了[有时我需要我在一个被杀死的终端中写的东西]。
那么有没有办法让每个终端立即写入 .bash_history ?或者至少每分钟一次,或者类似的东西?
mar*_*rio 127
实时更新 Bash 历史记录中详述的简单解决方案。
它说将这些命令放在 .bashrc 配置中:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Run Code Online (Sandbox Code Playgroud)
第一个命令将.history文件模式更改为追加。第二个配置history -a命令在每个 shell 提示符下运行。该-a立即写入当前的/新线,以历史文件。
zsh的相关资料:
sup*_*sup 74
尝试将其放入您的.bashrc:
shopt -s histappend # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Run Code Online (Sandbox Code Playgroud)
信用在这里:https : //stackoverflow.com/questions/103944/real-time-history-export-along-bash-terminal-windows/3055135
history -c清除正在运行的会话的历史记录。这将减少历史计数器的数量$HISTSIZE。history -r读取内容$HISTFILE并将它们插入到当前正在运行的会话历史记录中。这将使历史计数器增加 中的行数$HISTFILE。
我认为这意味着命令几乎立即可用(你有一个终端, write echo 1,第二个终端echo 2,第一次echo 3按下向下箭头两次,你应该echo 2可用。你必须在给定的终端中发出命令才能访问被写了。
小智 47
我有一个包含大约 100000 个条目的大型历史文件,清除历史列表并读取整个历史文件(使用history -c和history -r)的变体在显示提示之前引入了明显的(可能是 0.2 秒)延迟。使用history -n以便仅从历史文件中读取新行会更快:
shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
Run Code Online (Sandbox Code Playgroud)
PROMPT_COMMAND 不必导出,因为它是一个 shell 变量。
Gus*_*uss 12
所有其他答案的注释(基本上是相同的):
设置PROMPT_COMMAND="history -a;$PROMPT_COMMAND"在.bashrc(或朋友)就足够了。
此外,您可以history -a在想要“快照”当前会话中的历史记录时手动运行。
该命令shopt -s histappend不是必需的,因为history -a总是将新行附加到文件中并且从不覆盖它。此外,至少从 Bash 4 开始,这histappend是默认行为。