【问题标题】:BASH: Is there a way to automatically save recent lines to my bash history during a period of inactivity?BASH:有没有办法在不活动期间自动将最近的行保存到我的 bash 历史记录中?
【发布时间】:2014-11-19 14:31:54
【问题描述】:

.bash_history 文件是我们许多人的救命稻草。不幸的是,BASH 似乎只在会话关闭时保存会话的命令(通过exit)。

这是一个悲剧,那么,当一个会话意外关闭时,你在一个重要会话中的所有命令都被蒸发掉了——在它使用需要数小时才能正确处理的花哨语法归档所有命令之前......

当我在下班时忘记关闭 SSH 连接,并且由于不活动 (Write failed: broken pipe) 或当我在未手动关闭终端的情况下重新启动计算机等时,就会发生这种情况。

我希望在一段时间后存档我的 BASH 命令(比如每 10 分钟一次),这样如果我关闭会话,我的命令仍然会存在。 这看起来有点像很多人可能会觉得有用。

有没有人知道如何做到这一点?

理想情况下....

  • 一旦设置该功能,用户就不需要额外的努力——他/她可以添加到~/.bashrc
  • 用户可以更改备份间隔
  • 它将避免使用临时文件、别名 bash 或其他“黑客”

StackOverflow-ers - 认为自己面临挑战!

【问题讨论】:

    标签: bash shell scripting history .bash-profile


    【解决方案1】:

    您可以将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"
    

    【讨论】:

    • 所以它的作用是归档自上次归档以来输入的任何新命令——实际上每个命令将在成功完成该命令后归档,对吧?
    • 是的,如果“成功完成”是指在命令行中输入了该命令并按下了回车键。如果 command 有任何意义,那就是另一回事了,但它会保存在 .bash_history 中。
    • 这可以自动化吗,也许通过在后台运行一些cron-like 工作?如果是这样,我会将问题标记为已接受!
    【解决方案2】:

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

    使用trap,我们可以编写历史记录(就像#*一样糟糕?!虽然默认情况下bash不会这样做..):

    function rescue_history {
        history -a
    }
    trap rescue_history SIGHUP
    

    将以上内容放入您的.bashrc

    【讨论】:

    猜你喜欢
    • 2012-03-21
    • 2012-12-21
    • 2011-10-29
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多