Как избежать повторяющихся записей в.bash_history

Одна и та же команда снова и снова появляется в моей истории. Как я могу избежать этого? Я знаю, что это возможно через HISTCONTROL но я не нашел правильный путь.

6 ответов

Решение

От bash справочная страница:

HISTCONTROL

Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если список значений включает ignorespaceстроки, начинающиеся с пробела, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории, не будут сохранены. Значение ignoreboth это сокращение для ignorespace а также ignoredups, Значение erasedups вызывает удаление всех предыдущих строк, соответствующих текущей строке, из списка истории перед сохранением этой строки. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если HISTCONTROL не установлен или не содержит допустимого значения, все строки, прочитанные синтаксическим анализатором оболочки, сохраняются в списке истории при условии значения HISTIGNORE. Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL.

Поэтому поместите следующую строку в ваш ~/.bashrc:

export HISTCONTROL=ignoreboth:erasedups

Вставь это в свой ~/.bashrc:

export HISTCONTROL=ignoredups

Вы могли бы вместо этого использовать ignoreboth, Это сокращение для обоих ignorespaces (команды, начинающиеся с пробелов) и ignoredups (дубликаты).

я предпочитаю ignoredups Я считаю, что поведение по умолчанию игнорирования команд с пробелами в передней части довольно раздражает, когда я копирую команду с веб-сайта, и она не сохраняется, потому что я тоже случайно скопировал в пробел.... Но каждому своя.

Положить это в ~/.bashrc будет применять решение @ Элвина в разных сессиях как wlell

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

Источник: Linux: Bash history: настройки ignoredups и erasedups конфликтуют с общей историей между сеансами

export HISTCONTROL=erasedups

Добавьте следующее к вашему ~/.bashrc:

export HISTCONTROL=ignoredups

Для этого вы можете использовать эту команду:

nano ~/.bashrc

Для уникальной записи каждой новой команды сложно. Сначала нужно добавить в~/.profile или похожие:

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Тогда вам нужно добавить в ~/.bash_logout:

history -a
history -w
Другие вопросы по тегам