问题描述
我主要使用终结者,它通常打开3分割终端窗口。我也因为各种原因使用Gnome终端。我想知道在这种情况下如何处理bash历史记录,因为我运行history
时有时会错过以前发出的命令
例如,我的提示符显示当前的bash历史记录行(\!
),如果我用3个拆分的终端窗口启动终结符,则在所有终端上获得相同的历史记录行(比方说100)。哪些历史将被保存?
在使用终结者后也启动Gnome终端,无论在之前在终结者中发布的所有命令,我在启动时都会获得第100行
最佳解决思路
保存的bash会话是最近关闭的终端的会话。如果你想保存每个会话的命令,你可以使用here解释的技巧。
export PROMPT_COMMAND='history -a'
To quote the manpage: “If set, the value is executed as a command prior to issuing each primary prompt.”
So every time my command has finished, it appends the unwritten history item to
~/.bash_history
before displaying the prompt (only $PS1) again.So after putting that line in
/etc/bash.bashrc
I don’t have to find myself reinventing wheels or lose valuable seconds re-typing stuff just because I was lazy with my terminals.
无论如何,您需要考虑到来自不同会话的命令会混合在您的历史记录文件中,因此稍后将不会很直接地阅读它。
也可以看看:
次佳解决思路
在多次读取man bash
后,我为每个shell使用单独的历史文件。我做了一个mkdir -m 0700 ~/.history
然后添加
[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$$
# close any old history file by zeroing HISTFILESIZE
HISTFILESIZE=0
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096
HISTSIZE=4096
到我的~/.bashrc
。我时不时地记得du -sk .history
并将其清理干净。很高兴能为我保存我输入的每条命令。
我刚刚使用了上面的内容来查看我最近做了些什么,比如cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
或cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(在排序链中包含第一个参数,例如sudo mount
)。
第三种解决思路
从所有终端显示history
:
将export PROMPT_COMMAND='history -a; history -r'
添加到您的.bashrc文件。
来源:http://northernmost.org/blog/flush-bash_history-after-each-command /comment-page-1/index.html#comment-640
第四种思路
另请参见“keeping persistent history in bash”。它提示您将任何终端中输入的所有命令发送到”persistent history”文件(与通常为常规.history
执行的操作一起)。