Как остановить добавление истории Bash

9

У меня много проблем с настройкой истории терминала Bash так, как я хочу. Я хотел бы, чтобы не было повторяющихся записей, и если я ввожу команду, я хочу, чтобы она была сохранена, а дубликаты, указанные выше, были удалены.

Проблема в том, что historyкоманда показывает мне, что она работает так, как я хочу, но как только я выхожу, дубликаты возвращаются снова. Я считаю, что это просто добавление истории к существующей. У меня есть эти строки в моем .bashrcфайле:

HISTCONTROL=ignoreboth:erasedups
shopt -u histappend

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

Craig
источник
2
Здесь есть хорошее объяснение: unix.stackexchange.com/questions/18212/…
jasonwryan

Ответы:

7

Вы erasedupsдолжны делать то, что вы хотите в отношении дубликатов - просто обратите внимание, что удаление дубликатов запускается в момент добавления новой записи в историю и что оно стирает все старые вхождения команды, оставляя только самые последние.


Отвечая на вопрос « Как я могу сделать так, чтобы история была такой, какой она была до выхода из системы? »

На мой взгляд, это может быть полезно только время от времени. (Иначе зачем вообще использовать историю?) Вы можете сделать это, выполнив команду

history -c; history -r

Это очищает все записи истории, хранящиеся в данный момент в памяти, а затем перечитывает всю историю из файла истории. Таким образом, все команды, введенные вами после входа в текущий сеанс оболочки, забыты. Я нахожу это весьма полезным в ситуациях, когда я много тестирую (много похожих команд, но на самом деле не дублирую), а затем не хочу, чтобы моя история была искажена этим, поэтому у меня есть псевдоним для этого в моем .bashrc:

alias hrr='history -c; history -r'

( hrrзапоминается как "перечитанная история").

rozcietrzewiacz
источник