Неможливо збільшити довжину історії оболонок Mac OSX


26

Я встановив ~ / .bash_profile деякий час тому, щоб мати довжину більше 500 рядків, але, здається, система не може цього зрозуміти.

Ти знаєш чому?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500

Відповіді:


34

Вам також потрібно встановити HISTSIZE=10000000.

HISTFILESIZEвизначає кількість рядків, які потрібно зберегти у файлі історії, а HISTSIZEвизначає кількість рядків, які потрібно зберегти в пам'яті. Обидва за замовчуванням до500

Виконайте, echo $HISTFILESIZE $HISTSIZEперш ніж внести зміни, а потім знову після. Ви повинні побачити 10000000 500спочатку потім 10000000 10000000після.


16

Вам потрібно експортувати змінні HISTSIZEта HISTFILESIZEсередовище у ~/.bash_profileфайл.

Додайте у свій рядок наступні рядки ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000

9

Відповідь:

Все, що вам потрібно зробити, це встановити HISTSIZEу вашому баш-профілі ( ~/.bash_profile). Ви можете залишити HISTFILESIZE невстановленим . Це дозволить налаштувати як історію пам'яті, так і файлову історію.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Пояснення, додаткова інформація.

Проблема полягає в тому, що HISTFILESIZE встановлює лише максимальну історію, що зберігається у файлі під час запуску сеансу. HISTSIZE - це те, що визначає, скільки рядків буде збережено в кінці сеансу. Якщо HISTFILESIZE більше , ніж ваш HISTSIZE, ви ніколи не будете бачити більше , ніж ваш HISTSIZE , тому що файл отримує переписаний з командами HISTSIZE ( якщо тільки ви встановите історію Дописувати, але це окрема тема: шукати histappendв оболонці вбудованої команди для цього) .

З цієї причини ви не бачите ефекту. Якщо за замовчуванням HISTSIZE (можливо, 500) ваш файл історії завжди перезаписується останніми командами $ HISTSIZE. Все старіше (що потенційно може збільшити список за $ HISTSIZE) буде видалено.

У більшості випадків немає необхідності встановлювати HISTFILESIZE незалежно від HISTSIZE.

HISTSIZE визначає, скільки рядків буде записано у файл історії. Список команд обрізається після виходу, перед записом у файл історії, зберігаючи N останніх рядків. За замовчуванням цей список перезаписує файл історії.

HISTFILESIZE визначає, наскільки великим може бути файл історії (у рядках). Після запуску файл обрізається, зберігаючи N останніх рядків. Крім того, файл історії потенційно врізається, коли встановлюється HISTFILESIZE.

Нарешті, хоча він видається недокументованим, BASH встановлює HISTFILESIZE на основі HISTSIZE, якщо HISTSIZE встановлений під час запуску. Я спробував це на macOS та кількох різновидах Ubuntu, і поведінка послідовна. Якщо ви встановите HISTSIZE у файлі запуску ( не через командний рядок будь-якими способами), HISTFILESIZE буде встановлений у відповідність. (Спробуйте самостійно: встановіть HISTSIZE на якесь довільно велике значення в .bash_profile, вийдіть і запустіть новий термінал, echo $HISTSIZE $HISTFILESIZEі тоді ви знайдете їх відповідність.)

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


Ти прав, Зім. Вихідний код Bash показує, що він просто встановить HISTFILESIZE на HISTSIZE, якщо HISTFILESIZE не встановлений. git.savannah.gnu.org/cgit/bash.git/tree/…
robert
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.