Bash

如何定期自動執行 history -a 命令?

  • August 31, 2021

我正在使用 bash shell,我不時history -a手動執行命令。我的典型 shell 會話持續數週甚至數月,而且我很少退出 shell 會話。因此,我偶爾使用強制將目前會話歷史記錄寫入 bash_history history -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 分配的想法;它將新函式呼叫附加到已定義的任何現有值。

引用自:https://unix.stackexchange.com/questions/666841