Как избежать дублирования записей в .bash_history

77

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

    
задан karthick87 02.12.2010 в 21:05
источник

6 ответов

88

На странице bash man:

  

HISTCONTROL      

    

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

  

Итак, поставьте следующую строку в свой файл erasedups :

~/.bashrc     

ответ дан Isaiah 02.12.2010 в 21:09
источник
17

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

export HISTCONTROL=ignoredups

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

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

    
ответ дан Oli 02.12.2010 в 21:10
7

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

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

Источник: Linux: история Bash: «проигнорированные» и «удаленные» настройки конфликтуют с общей историей в сеансах     

ответ дан Nour Chawich 31.08.2015 в 17:44
4
export HISTCONTROL=erasedups
    
ответ дан withoutasound 03.12.2010 в 03:29
3

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

export HISTCONTROL=ignoredups

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

nano ~/.bashrc
    
ответ дан jrg 02.12.2010 в 21:11
0

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

HISTCONTROL=erasedups
PROMPT_COMMAND='history -a'

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

history -a
history -w
    
ответ дан Steven Penny 04.02.2018 в 19:42