HISTSIZE=-1
HISTFILESIZE=-1
export HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Source: https://askubuntu.com/questions/15926/how-to-avoid-duplicate-entries-in-bash-history

Stick this in your ~/.bashrc:

export HISTCONTROL=ignoredups

You could instead use ignoreboth. This it shorthand for both ignorespaces (commands starting with spaces) and ignoredups (duplicates).

I prefer ignoredups on its own as I find the default behaviour of ignoring commands with spaces at the front quite annoying when I copy a command off a website and it doesn’t get saved because I accidentally copied in a space too…. But to each their own.


Putting this in ~/.bashrc will apply @alvin’s solution across different sessions as wlell

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Source: Linux: Bash history: “ignoredups” and “erasedups” setting conflict with common history across sessions