zet*_*tah 130 command-line bash history
我主要使用终结者,它通常是用 3 个拆分的终端窗口打开的。由于各种原因,我也使用 Gnome 终端。
我想知道在这种情况下如何处理 bash 历史记录,因为我有时会在运行时错过以前发出的命令history
例如,我的提示显示当前的 bash 历史行 ( \!),如果我使用 3 个拆分终端窗口启动 Terminator,我会在所有终端上获得相同的历史行(假设为 100)。哪些历史将被保存?
在使用 Terminator 后也启动 Gnome Terminal 我在启动时得到第 100 行,不管之前在 Terminator 中发出的所有命令
jco*_*ado 129
保存的 bash 会话是最近关闭的终端的会话。如果你想为每个会话保存命令,你可以使用这里解释的技巧。
Run Code Online (Sandbox Code Playgroud)export PROMPT_COMMAND='history -a'引用联机帮助页:“如果设置,则在发出每个主要提示之前,该值将作为命令执行。”
因此,每次我的命令完成时,它都会在
~/.bash_history再次显示提示(仅 $PS1)之前附加未写入的历史记录项。因此,在
/etc/bash.bashrc输入该行之后,我不必发现自己重新发明轮子或浪费宝贵的时间来重新输入内容,因为我对我的终端很懒惰。
无论如何,您需要考虑到来自不同会话的命令将混合在您的历史文件中,因此以后阅读它不会那么简单。
也可以看看:
wal*_*tor 37
在多次阅读 之后man bash,我为每个 shell 使用单独的历史文件。我做了一个mkdir -m 0700 ~/.history然后添加
[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$(date +%y%b%d-%H%M%S).$$
# close any old history file by zeroing HISTFILESIZE
HISTFILESIZE=0
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096
HISTSIZE=4096
Run Code Online (Sandbox Code Playgroud)
到我的~/.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在排序链中)。
小智 15
我满怀热情地设定PROMPT_COMMAND='history -a; history -r',希望我的历史记录使用能更好!
哇,我很失望。
本质上,这样做会使 up/dn 箭头变得无用。因为现在每个历史会话都充斥着来自其他会话的命令。对我来说,这失去了历史上最好的特征。
有时,我想将我的历史记录从一个终端会话转移到另一个会话,以便我可以轻松地回忆起该会话中的命令。我可以非常有选择性地做到这一点。
我设置了一系列简单的历史操作别名,并且忽略历史记录中的这些命令:
alias ha="history -a"
alias hb="history -a; history -r"
alias hr="history -r"
alias hl="history | tail -20"
HISTIGNORE="ha:hb:hr:hl"
Run Code Online (Sandbox Code Playgroud)
我认为hb历史的融合……其他的都是不言自明的。
现在,当我想将历史记录从会话 A 复制到会话 B 时,我可以这样做:
ha - 将会话A历史记录追加到历史文件中hb - 将会话B历史记录附加到历史文件中,然后读取该文件这实质上保留了会话B的历史记录顺序,并将会话A历史记录添加到列表的更深处。
对我来说超级有用。也许对你也有帮助!
小智 10
另请参阅“在 bash 中保持持久历史”以获取另一种选择。它操纵您的提示,将输入到任何终端的所有命令发送到“持久历史”文件中(以及通常为常规执行的操作.history)。
history从所有终端显示:
添加export PROMPT_COMMAND='history -a; history -r'到您的 .bashrc 文件。
来源:http : //northernmost.org/blog/flush-bash_history-after-each-command