Є дві змінні, які керують розміром історії:
HISTFILESIZE Максимальна кількість рядків, що містяться у файлі історії. Коли цій змінній присвоюється значення, файл історії врізається, якщо необхідно, щоб містити не більше тієї кількості рядків, видаляючи найдавніші записи. Файл історії також прирізається до цього розміру після його запису при виході оболонки. Якщо значення дорівнює 0, файл історії обрізається до нульового розміру. Нечислові та числові значення менше нуля гальмують усічення. Оболонка встановлює за замовчуванням значення HISTSIZE після читання будь-яких файлів запуску.
і
HISTSIZE Кількість команд, які слід запам'ятати в історії команд (див. ІСТОРІЯ нижче). Якщо значення дорівнює 0, команди не зберігаються у списку історії. Числові значення менше нуля призводять до того, що кожна команда зберігається у списку історії (обмеження немає). Оболонка встановлює значення за замовчуванням на 500 після читання будь-яких файлів запуску.
Ці дві змінні дозволяють контролювати поведінку вашої історії. По суті, HISTSIZE
це кількість команд, збережених під час вашого поточного сеансу, і HISTFILESIZE
це кількість команд, які запам'ятаються протягом сеансів. Так, наприклад:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
У наведеному вище прикладі, оскільки HISTSIZE
встановлено значення 10, history
повертає список з 10 команд. Однак якщо ви вийдете з системи, а потім знову ввійдете в систему, history
поверне лише 5 команд, оскільки HISTFILESIZE
встановлено 5. Це відбувається тому, що після виходу з сеансу HISTFILESIZE
рядки вашої історії зберігаються у вашому файлі історії ( ~/.bash_history
за замовчуванням, але контролюється HISTFILE
). Іншими словами, команди додаються до HISTFILE
тих пір, поки не досягне $HISTFILESIZE
рядків, в який момент кожен наступний доданий рядок означає, що перша команда файлу буде видалена.
Ви можете встановити значення цих змінних у своєму ~/.profile
(або ~/.bash_profile
якщо такий файл існує). Не встановлюйте їх по- ~/.bashrc
перше, тому що у них немає роботи, а по-друге, тому що це призведе до різної поведінки в системі реєстрації проти оболонок без входу, що може призвести до інших проблем .
Іншими корисними змінними, які дозволяють точно налаштувати поведінку вашої історії, є:
HISTIGNORE
: Це дозволяє ігнорувати певні загальні команди, які рідко представляють інтерес. Наприклад, ви можете встановити:
export HISTIGNORE="pwd:df:du"
Це призведе до того, що будь-яка команда, що починається з pwd
, df
або du
ігнорується та не зберігається у вашій історії.
HISTCONTROL
: Цей дозволяє вибирати, як працює історія. Особисто я встановив, HISTCONTROL=ignoredups
що змушує його зберігати дублювані команди лише один раз. Інші варіанти - ignorespace
ігнорувати команди, починаючи з пробілу, і erasedups
це призводить до того, що всі попередні рядки, що відповідають поточному рядку, будуть видалені зі списку історії до того, як цей рядок буде збережено. ignoreboth
це скорочення для простору ігнорування та ігнорування.
HISTTIMEFORMAT
: Це дозволяє встановити формат часу файлу історії. Дивіться відповідь Панді або читайте man bash
подробиці.
Для подальшої тонкої настройки ви маєте:
Варіант histappend
баш. Це можна встановити, запустивши shopt -s histappend
або додавши цю команду до своєї ~/.bashrc
. Якщо цей параметр встановлений
список історії додається до файла, названого значенням змінної HISTFILE, коли оболонка виходить, а не перезаписує файл.
Це дуже корисно, оскільки дозволяє поєднувати історії різних сеансів (наприклад, думати різні термінали).
У history
команди є два корисні варіанти:
Наприклад, ви можете додати ці дві команди у свою команду PROMPT_COMMAND
(яка виконується кожного разу, коли оболонка показує підказку, тому щоразу, коли ви запускаєте нову оболонку та після кожної команди, виконайте її):
export PROMPT_COMMAND='history -a;history -r;'
У поєднанні вони гарантують, що будь-який новий термінал, який ви відкриєте, негайно імпортує історію будь-яких інших сеансів оболонки. Результат - загальна історія для всіх терміналів / сесій оболонки.