使用多个终端(终结器)时,bash 中的历史记录无限,不会丢失命令和打乱顺序

使用多个终端(终结器)时,bash 中的历史记录无限,不会丢失命令和打乱顺序

我想要无限的历史记录,因为我输入了很多命令,我可能会忘记,我想把它们存储在某个地方作为参考。但仅仅通过设置,HISTSIZE效果HISTFILESIZE并不好,因为如果我没记错的话,命令只有在终端窗口关闭时才会存储,而且往往会互相覆盖。所以我目前的设置是这样的:

export HISTCONTROL=ignoredups:erasedups  # no duplicate entries
export HISTSIZE=100000                   # big big history
export HISTFILESIZE=100000               # big big history
shopt -s histappend                      # append to history, don't overwrite it

然而这有一个缺点。当使用像 Terminator 这样的多窗格“终端应用程序”时,每个窗格的历史记录顺序不正确,就像 IIUC 一样,那么我不会丢失任何命令,但历史记录是中心,因此单独的终端无法说出发生了什么他们的最后一个命令。

我不需要坚持使用 bash 历史管理,我对其他可以解决这个问题的方法没有异议,即:不会丢失命令,每个终端都能够找到任何命令,同时仍然能够按时间回滚,以便此特定终端调用命令。如果您有使用 McFly 或其他任何可行方法的经验,请提供建议。但是我宁愿不放弃 bash,因为它更常用,而且我需要能够与大多数人分享脚本。

动机:想象一个终结器应用程序,在进行测试时被分成几个虚拟终端。为了清晰起见,我想在“其”特定窗格中调用一些命令。如果我能够只需按下 up-enter 即可重新运行上一个命令,那么对我来说速度会加快,但我做不到,因为来自其他窗格的操作会改变顺序。

谢谢!

答案1

单独的终端无法说出它们最后一条命令是什么

一个不靠谱的解决方案是弄乱历史文件姓名HISTFILE):

默认情况下,历史记录存储在~/.bash_history文件中。将以下行添加到.bash_profile并重新登录到 bash shell,以将历史命令存储在.commandline_warrior文件中而不是 .bash_history文件中。我还没有想出这个的实际用途。 当你想使用不同的历史文件名跟踪从不同终端执行的命令时,我可以看到它被使用

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

来源技巧 56:使用 HISTFILE 更改历史文件名

我会让你自己去弄清楚精确的机制,但这应该足以让你开始。

例如,使用终端窗口标题或类似内容来设置历史文件名会很好,但我对 bash 了解不够多,无法弄清楚如何自动执行此操作。

答案2

我在 .bashrc 上有这个

PROMPT_COMMAND='echo "$(history 1)" >> ~/history4ever'

它来自这本书 关于 shell 脚本(在 pt_BR 中)。

相关内容