Bash
如何定期自動執行 history -a 命令?
我正在使用 bash shell,我不時
history -a
手動執行命令。我的典型 shell 會話持續數週甚至數月,而且我很少退出 shell 會話。因此,我偶爾使用強制將目前會話歷史記錄寫入 bash_historyhistory -a
。我正在考慮編寫一個自動化腳本,history -a
每天定期執行一次。實現這一目標的最佳方法是什麼?
如果您
ENTER
每天至少按一次鍵,那麼基於 PROMPT_COMMAND 的解決方案可能對您有用:save_history_daily () { # if the current time is more than a day's-worth of seconds newer than # the modification time of $HISTFILE, then run 'history -a' if (( $(printf '%(%s)T' -1) - 86400 > $(stat -c %Y "$HISTFILE") )) then history -a fi } PROMPT_COMMAND="$PROMPT_COMMAND save_history_daily"
這依賴於該
printf %(...)T
功能的 bash 版本 bash-4.2-alpha 或更新版本;在這裡,我使用-1
它的參數來檢索目前時間(以秒為單位)。date
如果您有較舊的 bash 版本,則可以呼叫:來替換該位$(date +%s)
。從 bash-5.0-alpha 開始的 Bash 版本具有可用的 EPOCHSECONDS 變數,這會稍微更有效率。我從Gilles 的一個答案中複製了嵌入式換行符 PROMPT_COMMAND 分配的想法;它將新函式呼叫附加到已定義的任何現有值。