我想要无限的历史记录,因为我输入了很多命令,我可能会忘记,我想把它们存储在某个地方作为参考。但仅仅通过设置,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
我会让你自己去弄清楚精确的机制,但这应该足以让你开始。
例如,使用终端窗口标题或类似内容来设置历史文件名会很好,但我对 bash 了解不够多,无法弄清楚如何自动执行此操作。
答案2
我在 .bashrc 上有这个
PROMPT_COMMAND='echo "$(history 1)" >> ~/history4ever'
它来自这本书 关于 shell 脚本(在 pt_BR 中)。