Як зупинити Bash історію додавання


9

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

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

HISTCONTROL=ignoreboth:erasedups
shopt -u histappend

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


2
Тут є хороше пояснення: unix.stackexchange.com/questions/18212/…
jasonwryan

Відповіді:


7

erasedupsПовинен робити те , що ви хочете , щодо дублікатів - просто зазначити , що видалення дублікатів запускається в момент додавання нового запису в історії і що вона стирає всі старі входження команди, залишивши тільки найостанніші.


Відповідаючи на запитання " Як я можу зробити так, щоб історія була точно такою, якою вона є, перш ніж вийти з системи? "

Як я це бачу, це може бути корисним лише раз у раз. (Інакше навіщо взагалі використовувати історію?) Ви можете це зробити, видавши

history -c; history -r

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

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

( hrrзапам'ятовується як "перечитана історія").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.