问题描述
据我了解,当终端退出时,历史文件会更新。但有时我的电脑崩溃了,终端没有干净地退出,然后我从我的历史记录中丢失了那些令人讨厌的命令。我怎样才能让它立即刷新,这样即使我的计算机出现故障,条目仍然会出现在那里?目前我正在使用 this 解决方法,但我觉得应该有更好的方法。
我在 Ubuntu 12.10 上使用 gnome-terminal。
最佳方案
您从 Super-Users 站点提供的链接中的答案不一定被视为 history
命令默认行为的 ‘workarounds’。 bash shell 有一些理智的、开箱即用的默认行为。
我强烈建议阅读 How can I avoid losing any history lines? 以解释对 history
的这些修改正在做什么。此外,还有一些合理的担忧需要注意,为什么这不是 history
命令的默认行为。
-
性能 – 由于您使用
history -a
保存每个窗口中的每个命令,因此.bash_history
文件可能会变得非常大,并且需要更多资源来加载 bash shell。这可能会导致更长的启动时间(对于您的终端会话,而不是整个系统启动本身。)。 -
组织 -(来自上述文章)“同时交互式 shell(对于给定用户)的历史命令将交织在一起。因此,历史不是一个保证命令的顺序列表,因为它们在单个 shell 中执行。”
如果您担心进一步保护 bash shell 和 . bash_history
文件通过审计,看看这篇文章:How do I log history or “secure” bash against history removal?
有时(例如系统不稳定或电源故障),我发现以下命令很有用。
将以下行添加到您的 ~/.bashrc
文件中:
unset HISTFILESIZE
HISTSIZE=3000
PROMPT_COMMAND="history -a"
export HISTSIZE PROMPT_COMMAND
shopt -s histappend
请务必使用命令 source ~/.bashrc
获取 .bashrc
文件
次佳方案
对问题“如何手动保存终端历史记录?”的最简单、有效的答案:
history -a
也可能值得考虑切换到 zsh,它具有 setopt inc_append_history
(“在执行之前保存每个命令”)。
这个问题也很相关:Is it possible to make writing to .bash_history immediate?
第三种方案
手动将 bash 历史保存到文件:
history -w ~/history.txt
vim ~/history.txt
它将历史记录导出到一个名为 history.txt 的文件中。然后您可以使用您喜欢的编辑器查看它。
从 http://tech.karbassi.com/2007/01/14/view-and-change-bash-history/ 复制的答案