行が重複していない場合、プロンプトを表示する前に bash 履歴に追加するにはどうすればよいですか?

行が重複していない場合、プロンプトを表示する前に bash 履歴に追加するにはどうすればよいですか?

シャットダウン時に gnome ターミナルを閉じないと履歴が保存されないことがよくあるようなので、行が重複していない場合はプロンプトを表示する前に bash 履歴に追加したいと思います。bashrc にはexport HISTCONTROL=ignoreboth、ignoredups を意味するはずの行がありますが、bash_history に重複が残っているため、機能していないようです。どうすればよいでしょうか?

解決策ではありませんが、さらなる示唆を提供します。$PROMPT_COMMANDには"$(history 1)" (if_not_duplicate) >> ~/.bash_history

また、隣接していない重複がすでに挿入されている場合は、それが削除されます。

perl -nei '$H{$_}++ or print' ~/.bash_history 

答え1

これを正しく行うには、PROMPT_COMMAND と HISTCONTROL の両方を変更する必要があります。次の操作で問題が解決するはずです。

# The secret sauce is "erasedups," which replaces the default of "ignoredups."
export HISTCONTROL=erasedups:ignorespace

# Write the history to HISTFILE before showing the prompt.
export PROMPT_COMMAND='history -w'

このアプローチで考慮すべき 2 つの注意点は次のとおりです。

  1. 履歴 (具体的には重複エントリ) が失われます。これは、HISTTIMEFORMAT 値に何らかの依存をしている場合は問題になる可能性があります。
  2. HISTFILE は HISTFILESIZE に継続的に切り捨てられます。

これらは必ずしも問題というわけではなく、知っておくべき小さな問題にすぎません。

関連情報