History -a コマンドを定期的に自動実行するには?

History -a コマンドを定期的に自動実行するには?

history -a私はbashシェルを使用しており、時には手動でコマンドを実行します。私の一般的なシェルセッションは数週間または数ヶ月間続き、シェルセッションをほとんど終了しません。そのため、history -a時々現在のセッション履歴を強制的にbash_historyに記録するようにします。history -a毎日定期的に実行される自動化スクリプトを作成するつもりです。これを達成するための最良の方法は何ですか?

ベストアンサー1

1 日に 1 回以上キーを押すと、ENTERPROMPT_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"

これはbashバージョンbash-4.2-alpha以降の機能に依存しますprintf %(...)T。ここでは-1、その引数を使用して現在時刻(エポック以降の秒)を取得します。以前のbashバージョンがある場合は、次のように呼び出してdateこのビットを置き換えることができます$(date +%s)。 bash-5.0-alpha で始まる Bash バージョンでは EPOCHSECONDS 変数を使用できますが、これはやや効率的です。

PROMPT_COMMAND 割り当てに改行文字を挿入するアイデアをコピーしました。Gilesの答えの1つ;定義された既存の値に新しい関数呼び出しを追加します。

おすすめ記事