2014-09-24 19 views
2

.bash_history文件对我们很多人来说都是救命。不幸的是,BASH似乎只在会话关闭时才保存会话的命令(通过exit)。BASH:有没有办法在闲置期间自动将最近的几行保存到我的bash历史记录中?

这是一个悲剧,然后,当一个重要会话中的所有命令在会话意外关闭时被蒸发 - 在它将所有命令归档为花哨的语法并花费数小时才能正确完成之前......

这发生在我身上时,我忘了下班时关闭一个SSH连接,并断开连接由于不活动(Write failed: broken pipe),或者当我重新启动我的电脑,而无需手动关闭我的终端,等等。

我很想让我的BASH命令在一段时间后存档 - 比如说每隔10分钟 - 所以如果我关闭了一个会话,我的命令仍然存在。这似乎是很多人可能会觉得有用的东西。

有没有人有如何做到这一点的想法?

理想....

  • 的功能将需要上一次设置用户的部分没有额外的努力 - 这是他/她可能会增加~/.bashrc
  • 用户可以改变备份间隔
  • 它会避免使用临时文件,别名bash或其他“黑客”

StackOverflow -ers - 考虑自己挑战!

回答

3

可以使用history命令-a选项:立即

history 
-a  Append the ``new'' history lines (history lines entered since the 
     beginning of the current bash session) to the history file. 

你可以写的每一个命令历史记录文件与PROMPT_COMMAND功能的一点点帮助:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt. 

所以只要把这成.bashrc

PROMPT_COMMAND="history -a" 
+0

那么什么这样做是归档自上次归档后输入的所有新命令 - 有效地,每次命令都会在成功完成该命令时归档,对吗? – jvriesem 2014-09-25 00:40:40

+0

是的,如果通过“成功完成”,您的意思是输入命令 - 在命令行中输入命中。如果命令有任何意义是另一回事,但它将被保存在.bash_history中。 – 2014-09-25 00:53:38

+0

这可以自动化,也许可以通过在后台运行一些类似cron的工作?如果是这样,我会将问题标记为已接受! – jvriesem 2015-11-18 02:15:32

0

根据this bash将(通常)在断开连接时收到SIGHUP

使用trap我们可以写历史(如跛足#*?是的bash默认情况下不这样做,但..):

function rescue_history { 
    history -a 
} 
trap rescue_history SIGHUP 

把上面你.bashrc

相关问题