当前位置: 首页>>技术问答>>正文


Bash历史处理与多个终端

, , , , ,

问题描述

我主要使用终结者,它通常打开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 |lesscut -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执行的操作一起)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/959.html,未经允许,请勿转载。