Та сама команда перерахована в моїй історії знову і знову. Як я можу цього уникнути? Я знаю, що це можливо через, HISTCONTROLале я не знайшов правильного шляху.
Та сама команда перерахована в моїй історії знову і знову. Як я можу цього уникнути? Я знаю, що це можливо через, HISTCONTROLале я не знайшов правильного шляху.
Відповіді:
На bashчоловіковій сторінці:
ІСТКОНТРОЛ
Список значень, розділених двокрапкою, контролює спосіб збереження команд у списку історії. Якщо список значень включає в себе
ignorespace, рядки, які починаються з пробілу, не зберігаються у списку історії. Значенняignoredupsпричин не призводить до збереження рядків, що відповідають попередньому запису історії. Значенняignorebothскорочення дляignorespaceтаignoredups. Значенняerasedupsпризводить до того, що всі попередні рядки, що відповідають поточному рядку, будуть видалені зі списку історії, перш ніж цей рядок буде збережено. Будь-яке значення, яке не є у наведеному вище списку, ігнорується. Якщо HISTCONTROL не встановлено, або не містить дійсного значення, всі рядки, прочитані аналізатором оболонки, зберігаються у списку історії, залежно від значення HISTIGNORE. Другий та наступні рядки багаторядкової складеної команди не перевіряються і додаються в історію незалежно від значення HISTCONTROL.
Тому поставте наступний рядок у своєму ~/.bashrc:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_loginбільшості випадків це буде працювати , якщо .bashrc модифікується , але це не так все час.
source ~/.bashrc && source ~/.bash_profile
Вставте це у свій ~/.bashrc:
export HISTCONTROL=ignoredups
Ви можете замість цього використовувати ignoreboth. Це скорочення як для ignorespacesкоманд, починаючи з пробілів, так і для ignoredupsдублікатів.
Я віддаю перевагу ignoredupsсамостійно, оскільки мені здається, що поведінка за замовчуванням ігнорування команд з пробілами на фронті є дуже дратівливою, коли я копіюю команду з веб-сайту, і вона не зберігається, тому що я випадково скопіювала в простір теж .... Але для кожен свій.
ignoredupsпричин рядків, що відповідають попередньому запису історії, не зберігається . Він видаляє лише послідовні однакові лінії.
Підставляючи це в ~/.bashrcзастосує рішення @ Елвін на різних сесіях, wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROLі ваше не роблять? Яка різниця? Це працює для мене без експорту, мені просто цікаво
exportробить змінну доступною для підпроцесів. stackoverflow.com/q/1158091/552621 У разі HISTCONTROL, PROMPT_COMMANDі т.д., ці змінні використовуються самої оболонки , так , можливо , їх експорт (для дітей процесів) не є необхідним.
Uniqely записувати кожну нову команду складно. Спочатку потрібно додати
~/.profileабо подібне:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Потім потрібно додати до ~/.bash_logout:
history -a
history -w