我经常查看我的.bash_history文件,看看我是如何运行程序的,或者我使用的是什么参数。问题是我的历史似乎非常不完整。一些命令我会发现我几个月前跑过,有些命令我昨天跑了但不在那里。我认为问题在于我经常使用ssh,而且我经常不会干净地注销,而是在我的笔记本电脑睡眠或移动到不同的wifi网络时断开连接。所以看起来bash只会在它退出时写入历史文件。这是正确的吗?有没有办法可以强制它编写每个命令或每几个命令?
答案 0 :(得分:6)
将history -a
添加到PROMPT_COMMAND
,以便在每次提示之前更新已保存的历史记录。
PROMPT_COMMAND='history -a'
这应该放在.bashrc
文件中。
答案 1 :(得分:1)
您可以安装Advanced Shell History,这是一个将bash
或zsh
历史记录写入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)
执行以下命令
注意 - 您可以将以上命令添加到.bash_profile文件并重新启动以获得永久解决方案