如何更频繁地更新bash_history?

时间:2013-02-25 20:07:38

标签: bash

我经常查看我的.bash_history文件,看看我是如何运行程序的,或者我使用的是什么参数。问题是我的历史似乎非常不完整。一些命令我会发现我几个月前跑过,有些命令我昨天跑了但不在那里。我认为问题在于我经常使用ssh,而且我经常不会干净地注销,而是在我的笔记本电脑睡眠或移动到不同的wifi网络时断开连接。所以看起来bash只会在它退出时写入历史文件。这是正确的吗?有没有办法可以强制它编写每个命令或每几个命令?

3 个答案:

答案 0 :(得分:6)

history -a添加到PROMPT_COMMAND,以便在每次提示之前更新已保存的历史记录。

PROMPT_COMMAND='history -a'

这应该放在.bashrc文件中。

答案 1 :(得分:1)

您可以安装Advanced Shell History,这是一个将bashzsh历史记录写入sqlite数据库的开源工具。这比在history -a中简单地包含PROMPT_COMMAND更为极端,但它还记录了当前工作目录,命令退出代码,命令开始和停止时间,会话开始和停止时间等内容, tty等。

如果要查询历史数据库,可以编写自定义SQL查询并将其提供给捆绑的ash_query工具。还有一些有用的预打包查询,但由于我非常了解SQL,我通常只需打开数据库并在需要查找内容时编写自定义内容。

我发现一个非常有用的命令是查看当前工作目录的历史记录。它帮助我记住我在做某事时离开的地方。

vagrant@precise32:~$ ash_query -q CWD
session
    when                   what
1
    2014-08-27 17:13:07    ls -la
    2014-08-27 17:13:09    cd .ash
    2014-08-27 17:16:27    ls
    2014-08-27 17:16:33    rm -rf advanced-shell-history/
    2014-08-27 17:16:35    ls
    2014-08-27 17:16:37    less postinstall.sh
    2014-08-27 17:16:57    sudo reboot -n

使用当前工作目录(及其下面的任何内容)使用相同的历史记录:

vagrant@precise32:~$ ash_query -q RCWD
session
    where
        when                   what
1
    /home/vagrant/advanced-shell-history
        2014-08-27 17:11:34    nano ~/.bashrc
        2014-08-27 17:12:54    source /usr/lib/advanced_shell_history/bash
        2014-08-27 17:12:57    source /usr/lib/advanced_shell_history/bash
        2014-08-27 17:13:05    cd
    /home/vagrant
        2014-08-27 17:13:07    ls -la
        2014-08-27 17:13:09    cd .ash
    /home/vagrant/.ash
        2014-08-27 17:13:10    ls
        2014-08-27 17:13:11    ls -l
        2014-08-27 17:13:16    sqlite3 history.db
        2014-08-27 17:13:43    ash_query
        2014-08-27 17:13:50    ash_query -Q
        2014-08-27 17:13:56    ash_query -q DEMO
        2014-08-27 17:14:39    ash_query -q ME
        2014-08-27 17:16:26    cd
    /home/vagrant
        2014-08-27 17:16:27    ls
        2014-08-27 17:16:33    rm -rf advanced-shell-history/
        2014-08-27 17:16:35    ls
        2014-08-27 17:16:37    less postinstall.sh
        2014-08-27 17:16:57    sudo reboot -n

FWIW - 我是该项目的作者和维护者。

答案 2 :(得分:0)

执行以下命令

  1. export HISTTIMEFORMAT =“%d /%m /%y%T”
  2. shopt -s histappend
  3. PROMPT_COMMAND =“history -a; $ PROMPT_COMMAND”
  4. 注意 - 您可以将以上命令添加到.bash_profile文件并重新启动以获得永久解决方案