使用多个终端处理Bash历史记录
我主要使用终结者,它通常用3个分割终端窗口打开。 我也出于各种原因使用Gnome终端。
我想知道在这种情况下如何处理bash历史记录,因为我在运行history
时有时会错过以前发出的命令
例如,我的提示显示当前的bash历史记录行( \!
),如果我启动带有3个分割终端窗口的终结者,我会在所有终端上获得相同的历史记录行(假设为100)。 哪个历史会被保存?
在使用终结器后启动Gnome终端我在启动时获得第100行,而不管之前在终结器中发出的所有命令
保存的bash会话是最近关闭的终端的会话。 如果要为每个会话保存命令,可以使用此处说明的技巧。
export PROMPT_COMMAND='history -a'
引用联机帮助页:“如果设置,则在发出每个主要提示之前将该值作为命令执行。”
所以每次我的命令完成后,它
~/.bash_history
在显示提示符(仅$ PS1)之前将未~/.bash_history
历史记录项附加到~/.bash_history
。因此,在将该行放入
/etc/bash.bashrc
后,我不必发现自己重新发明轮子或丢失宝贵的秒数重新输入内容,因为我对我的终端很懒。
无论如何,您需要考虑来自不同会话的命令将混合在您的历史记录文件中,以便稍后阅读它不会那么简单。
也可以看看:
在多次读取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
记得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
)。
另请参阅“ 将bash中的持久历史记录保留 ”。 它可以根据您的提示将所有输入任何终端的命令发送到“持久历史记录”文件中(与常规.history
通常所做的.history
)。
显示所有终端的history
:
添加export PROMPT_COMMAND='history -a; history -r'
export PROMPT_COMMAND='history -a; history -r'
到您的.bashrc文件。
资料来源: http : //northernmost.org/blog/flush-bash_history-after-each-command