当前位置: 首页>>技术教程>>正文


bash – 如何手动保存终端历史记录?

, , ,

问题描述

据我了解,当终端退出时,历史文件会更新。但有时我的电脑崩溃了,终端没有干净地退出,然后我从我的历史记录中丢失了那些令人讨厌的命令。我怎样才能让它立即刷新,这样即使我的计算机出现故障,条目仍然会出现在那里?目前我正在使用 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/ 复制的答案

参考资料

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