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

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

135
задан 5 October 2012 в 21:02

6 ответов

Со страницы руководства bash:

HISTCONTROL

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

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

export HISTCONTROL=ignoreboth:erasedups

0
ответ дан 5 October 2012 в 21:02

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

export HISTCONTROL=ignoredups

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

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

0
ответ дан 5 October 2012 в 21:02
export HISTCONTROL=erasedups
0
ответ дан 5 October 2012 в 21:02

Если поместить это в ~/.bashrc, решение @ alvin будет применено к различным сеансам как wlell

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

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

0
ответ дан 5 October 2012 в 21:02

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

export HISTCONTROL=ignoredups

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

nano ~/.bashrc
0
ответ дан 5 October 2012 в 21:02

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

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Затем нужно добавить к ~/.bash_logout:

history -a
history -w
0
ответ дан 5 October 2012 в 21:02

Другие вопросы по тегам:

Похожие вопросы: