是否可以立即写入 .bash_history ?

Mat*_*att 160 bash history

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

那么有没有办法让每个终端立即写入 .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的相关资料:

  • 好这种作品。我尝试了更多测试,它似乎只适用于第一个命令。它适合你吗? (2认同)

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清除正在运行的会话的历史记录。这将减少历史计数器的数量$HISTSIZEhistory -r读取内容$HISTFILE并将它们插入到当前正在运行的会话历史记录中。这将使历史计数器增加 中的行数$HISTFILE

我认为这意味着命令几乎立即可用(你有一个终端, write echo 1,第二个终端echo 2,第一次echo 3按下向下箭头两次,你应该echo 2可用。你必须在给定的终端中发出命令才能访问被写了。

  • @artfulrobot:这个命令是一个内置的 `bash`,所以它在 `man bash` 中有描述。您还可以使用“帮助历史记录”。 (13认同)
  • `history -c; 的缺点 历史 -r` 是,如果您在同一台计算机上打开另一个终端,并切换到另一个终端执行某些操作,请按向上键,您会看到来自前一个终端的最后一个命令,而不是来自这个终端。很烦人。 (5认同)
  • 我将 zsh 配置为这样工作:每个 shell 跟踪其自己的历史记录(以及在此之前的合并历史记录),并且每个命令都附加到合并历史记录中。这比总是为每个 shell 的每个命令重新加载历史记录*不同*并且*更好*,因为我倾向于为每个 shell 终端设置不同的“工作线程”或“作业”。我认为这就是使用 `-r` 和 `-c` 与仅仅使用 `-a` 之间的区别。 (2认同)

小智 47

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

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
Run Code Online (Sandbox Code Playgroud)

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

  • 杰出的!连接断开时不再丢失历史记录! (2认同)

Gus*_*uss 12

所有其他答案的注释(基本上是相同的):

设置PROMPT_COMMAND="history -a;$PROMPT_COMMAND".bashrc(或朋友)就足够了。

此外,您可以history -a在想要“快照”当前会话中的历史记录时手动运行。

该命令shopt -s histappend不是必需的,因为history -a总是将新行附加到文件中并且从不覆盖它。此外,至少从 Bash 4 开始,这histappend是默认行为。

  • Mac 从未附带过 Bash 4(即使是新的)。Apple 不喜欢 Bash 在 Bash 4 中转向 GPLv3,因此他们很早就停止在 MacOS 上更新 Bash。这也是新的 MacOS 改用 Zsh 作为默认 shell 的原因。长话短说,如果您想在 Mac 上安装 Bash 4,则必须自行安装。 (3认同)