Є дві змінні, які керують розміром історії:
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;'
У поєднанні вони гарантують, що будь-який новий термінал, який ви відкриєте, негайно імпортує історію будь-яких інших сеансів оболонки. Результат - загальна історія для всіх терміналів / сесій оболонки.