Та сама команда перерахована в моїй історії знову і знову. Як я можу цього уникнути? Я знаю, що це можливо через, 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