我经常在我的 .bash_history 文件中查看我是如何运行程序的或者我使用了哪些参数。问题是我的历史似乎很不完整。我会发现一些命令是我几个月前运行的,另一些是我昨天运行的,但不存在。我认为问题在于我经常使用 ssh 工作,而且我经常不会干净地注销,而是在我的笔记本电脑休眠或移动到不同的 wifi 网络时断开连接。所以看起来 bash 只在退出时写入历史文件。这是正确的吗?有没有办法强制它写每个命令,或者每隔几个命令?
问问题
2148 次
3 回答
8
添加history -a
到您的PROMPT_COMMAND
以在每次提示之前更新您保存的历史记录。
PROMPT_COMMAND='history -a'
这应该在您的.bashrc
文件中。
于 2013-02-25T20:11:40.430 回答
3
您可以安装Advanced Shell Historybash
,这是一个将您的或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 - 我是该项目的作者和维护者。
于 2014-08-30T19:52:21.043 回答
0
执行以下命令
- 导出 HISTTIMEFORMAT="%d/%m/%y %T"
- shopt -s histappend
- PROMPT_COMMAND="历史-a;$PROMPT_COMMAND"
注意-您可以将上述命令添加到 .bash_profile 文件并重新启动以获得永久解决方案
于 2017-02-10T11:12:17.523 回答