Как добавить строку в историю bash перед отображением приглашения, если она не является дубликатом?

Как добавить строку в историю bash перед отображением приглашения, если она не является дубликатом?

Поскольку часто кажется, что история не сохраняется при выключении и не закрытии терминала gnome, я хотел бы добавить в историю bash перед тем, как показывать приглашение, если строка не является дубликатом. Хотя у меня есть export HISTCONTROL=ignorebothв bashrc, что должно подразумевать passedups, похоже, это не работает, так как я все еще получаю дубликаты в 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'

При таком подходе следует учитывать два обстоятельства:

  1. Вы потеряете историю (в частности, дублирующиеся записи), что может иметь значение, если вы полагаетесь на значения HISTTIMEFORMAT для чего-либо.
  2. Вы будете постоянно обрезать свой HISTFILE до HISTFILESIZE.

Это не обязательно проблемы, а просто незначительные неполадки, о которых вам следует знать.

Связанный контент