Не могу увеличить длину истории оболочки bash для 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 ( ~/.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, если вы не хотите использовать другие значения, а варианты использования с разными значениями встречаются редко (и, как правило, включают больше параметров настройки истории, чтобы получить что-то полезное).

Zim
источник
Вы правы, Зим. Исходный код Bash показывает, что он просто установит HISTFILESIZE в HISTSIZE, если HISTFILESIZE не установлен. git.savannah.gnu.org/cgit/bash.git/tree/…
Роберт